Visit Our UNIX and Linux User Community

Top Forums Shell Programming and Scripting Perl: encoding changes and odd symbols Post 303045758 by bedtime on Sunday 12th of April 2020 09:28:14 AM
Old 04-12-2020
Perl: encoding changes and odd symbols

*** FIXED ISSUE - SOLUTION BELOW ***



This is a much simplified version of a script that I'm using. The program finds the number 1 in brackets-((1))-and replaces it with a sentence. The text is French because the program translates into French and I want to know it works properly with accents.

replace.sh (can just be pasted into shell):
Code:
#!/bin/sh
num=1
rm -rf temp.tmp
touch temp.tmp
iconv -f utf-8 temp.tmp
echo '((1)) ((2))' >> temp.tmp
text='Il reçoit 5 000 $ à la livraison. 5 000 $?'
perl -i -CS -pne 's/\(\('"${num}"'\)\)/'"${text}"'/' temp.tmp
cat temp.tmp

The result is:


In an editor it displays as:

Code:
Il reçoit 5 000   la livraison. 5 000 0 ((2))

In shell it displays as:
Code:
$ cat temp.tmp.tmp
Il reçoit 5 000 � la livraison. 5 000 0 ((2))

The file was a UTF-8 before perl wrote on it and now it is iso-8859-1:
Code:
$ file -i temp.tmp
temp: text/plain; charset=iso-8859-1

I would like the result to be:
Code:
Il reçoit 5 000 $ à la livraison. 5 000 $? ((2))

It seems that after using echo the file format changes.




*** SOLUTION ***



I used sed instead and did this:


Code:
#!/bin/sh
num=1
rm -rf temp.tmp
touch temp.tmp
iconv -f utf-8 temp.tmp
echo '((1)) ((2))' >> temp.tmp
text='Il reçoit 5 000 $ à la livraison. 5 000 $?'

LC_ALL=C sed -i 's/(('"${num}"'))/'"${text}"'/g' temp.tmp
cat temp.tmp



Second last line from the bottom works fine.

Last edited by bedtime; 04-12-2020 at 01:47 PM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

encoding

Hi, I'm using putty and when I try to write it writes | (or when I try to write , it writes i) I tried to change settings/translation of putty but with no success I have KSH # locale LANG= LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C"... (3 Replies)
Discussion started by: palmer18
3 Replies

2. Shell Programming and Scripting

Perl IO vs GLOB symbols

Hi, Can someone please clarify how we are able to use both IO and GLOB symbols of a package variable interchangeably? Please consider the following code: open(FH,"myfile") || die "Unable to open file myfile:$@"; my $glob_var = *main::FH{GLOB}; my $io_var = *main::FH{IO}; print $glob_var... (0 Replies)
Discussion started by: srinivasan_85
0 Replies

3. AIX

get the file encoding

Hello! The system is AIX 5.3 Give please command or script to get the file encoding (1 Reply)
Discussion started by: vinment
1 Replies

4. Shell Programming and Scripting

Araic Encoding

hi folks , I have a shell script which contain SQL query that dump some data from the DB in arabic and this data is written to a file in unix machine but the problem that the arabic data is appear like ??????????|111|???????? even when I move it to my windows XP machine. Any one have an Idea... (2 Replies)
Discussion started by: habuzahra
2 Replies

5. Shell Programming and Scripting

Encoding troubles

Hello All I have a set of files, each one containing some lines that follows that regex: regex='disabled\,.*\,\".*\"'and here is what file says about each files: file <random file> <random file> ASCII text, with CRLF line terminatorsSo, as an example, here is what a file ("Daffy Duck - The... (3 Replies)
Discussion started by: tukuyomi
3 Replies

6. Shell Programming and Scripting

Encoding conversion in PERL script

I have oracle 9i database installed with UTF-8 Encoding. I want a perl script that converts unicode to utf8 before commiting in database and utf8 to unicode when retreiving from database For example : the word ntrnatnlztion has to be stored in database as Internationalization and when retreived... (6 Replies)
Discussion started by: vkca
6 Replies

7. Shell Programming and Scripting

Perl: How to Print symbols like " and ;

Hi, How do I print a line with symbols in a file? Exp: If I want to print line: Hi "Lisa;John" Command: print FILE "Hi "Lisa;John""; - will give me error Bareword found where operator expected... Can someone advise how can I print any line consiting symbols like example above. Thanks... (3 Replies)
Discussion started by: SSGKT
3 Replies

8. Shell Programming and Scripting

How to find the file encoding and updating the file encoding?

Hi, I am beginner to Unix. My requirement is to validate the encoding used in the incoming file(csv,txt).If it is encoded with UTF-8 format,then the file should remain as such otherwise i need to chnage the encoding to UTF-8. Please advice me how to proceed on this. (7 Replies)
Discussion started by: cnraja
7 Replies

9. Shell Programming and Scripting

Calling a Perl script in a Bash script -Odd Situation

I am creating a startup script for an application. This application's startup script is in bash. It will also need to call a perl script (which I will not be able to modify) for the application environment prior to calling the application. The problem is that this perl script creates a new shell... (5 Replies)
Discussion started by: leepet01
5 Replies

10. Solaris

View file encoding then change encoding.

Hi all!! Im using command file -i myfile.xml to validate XML file encoding, but it is just saying regular file . Im expecting / looking an output as UTF8 or ANSI / ASCII Is there command to display the files encoding? Thank you! (2 Replies)
Discussion started by: mrreds
2 Replies
MKTEMP(1)						    BSD General Commands Manual 						 MKTEMP(1)

NAME
mktemp -- make temporary file name (unique) SYNOPSIS
mktemp [-dqu] [-p tmpdir] {-t prefix | template ...} DESCRIPTION
The mktemp utility takes each of the given file name templates and overwrites a portion of it to create a file name. This file name is unique and suitable for use by the application. The template may be any file name with some number of 'Xs' appended to it, for example /tmp/temp.XXXX. The trailing 'Xs' are replaced with the current process number and/or a unique letter combination. The number of unique file names mktemp can return depends on the number of 'Xs' provided; six 'Xs' will result in mktemp testing roughly 26 ** 6 combinations. If mktemp can successfully generate a unique file name, the file is created with mode 0600 (unless the -u flag is given) and the filename is printed to standard output. If the -t prefix option is given, mktemp will generate a template string based on the prefix and the TMPDIR environment variable, if set. The default location if TMPDIR is not set is /tmp. The default location of the temporary directory can be overridden with the -p tmpdir option. The template string created will consist of the prefix followed by a '.' and an eight character unique letter combination. 'Xs' in the prefix string will be treated as literal. If an additional template argument is passed, a second file will be created. Care should be taken to ensure that it is appropriate to use an environment variable potentially supplied by the user. Any number of temporary files may be created in a single invocation using multiple template arguments, also a single one based on the inter- nal template with the -t option value as filename prefix. At least one template argument or the -t option must be present. mktemp is provided to allow shell scripts to safely use temporary files. Traditionally, many shell scripts take the name of the program with the pid as a suffix and use that as a temporary file name. This kind of naming scheme is predictable and the race condition it creates is easy for an attacker to win. A safer, though still inferior, approach is to make a temporary directory using the same naming scheme. While this does allow one to guarantee that a temporary file will not be subverted, it still allows a simple denial of service attack. For these reasons it is suggested that mktemp be used instead. OPTIONS
The available options are as follows: -d Make a directory instead of a file. -q Fail silently if an error occurs. This is useful if a script does not want error output to go to standard error. -t prefix Generate a template (using the supplied prefix and TMPDIR if set) to create a filename template. If -t prefix and template are both given, prefix will not apply to template. -u Operate in ``unsafe'' mode. The temp file will be unlinked before mktemp exits. This is slightly better than mktemp(3) but still introduces a race condition. Use of this option is not encouraged. EXIT STATUS
The mktemp utility exits with a value of 0 on success, and 1 on any failure. EXAMPLES
The following sh(1) fragment illustrates a simple use of mktemp where the script should quit if it cannot get a safe temporary file. TMPFILE=`mktemp /tmp/${0##*/}.XXXXXX` || exit 1 echo "program output" >> $TMPFILE To allow the use of $TMPDIR: TMPFILE=`mktemp -t ${0##*/}` || exit 1 echo "program output" >> $TMPFILE In this case, we want the script to catch the error itself. TMPFILE=`mktemp -q /tmp/${0##*/}.XXXXXX` if [ $? -ne 0 ]; then echo "$0: Can't create temp file, exiting..." exit 1 fi SEE ALSO
mkdtemp(3), mkstemp(3), mktemp(3), environ(7) HISTORY
The mktemp utility appeared in NetBSD 1.5. It has been imported from FreeBSD, the idea and the manual page were taken from OpenBSD. BSD
August 15, 2009 BSD

Featured Tech Videos

All times are GMT -4. The time now is 07:34 PM.
Unix & Linux Forums Content Copyright 1993-2021. All Rights Reserved.
Privacy Policy