sed not see last row


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed not see last row
# 1  
Old 07-29-2013
sed not see last row

Hi Everyone!

I have a problem my script. I'm useing sed to find the separate character in my text
Code:
sed 's/"[^"]*"//g' ./myfile.txt

My problem:
When the last row is doesn't has enter in the end of line, the sed is not work. So if i have a 30 rows text i will see 29 rows separators.

Please help me why not work. Thank You!
# 2  
Old 07-29-2013
Can u show what is ur input and what output you are expecting?
# 3  
Old 07-29-2013
Quote:
Originally Posted by millan
Can u show what is ur input and what output you are expecting?
Its not work if you make a text file by vi editor. Try to make a file in windows whit this text:
Code:
"","","","","","","","",""

After you try again but whit 2 rows, like this:
Code:
"","","","","","","","",""
"","","","","","","","",""

and try the sed script both.
# 4  
Old 07-29-2013
i dont get it what you are trying to achieve. what is the expected output?

Code:
[oracle@server ~]$ cat infile3
"","","","","","","","",""
"","","","","","","","",""
"","","","","","","","",""
"","","","","","","","",""
[oracle@server ~]$ sed 's/"[^"]*"//g' infile3
,,,,,,,,
,,,,,,,,
,,,,,,,,
,,,,,,,,

# 5  
Old 07-29-2013
input-output:
Code:
alma@app2:/home/snayper$ cat aaa.txt
"","","","","","","","",""
"","","","","","","","",""alma@app2:/home/snayper$ sed 's/"[^"]*"//g' ./aaa.txt
,,,,,,,,
alma@app2:/home/snayper$

# 6  
Old 07-29-2013
Without doing any special, tried with GNU sed and the sed that comes with AIX, same result:
Code:
myuser@somehost$ cat aaa.txt
"","","","","","","","",""
"","","","","","","","",""myuser@somehost$
myuser@somehost$ sed 's/"[^"]*"//g' ./aaa.txt
,,,,,,,,
,,,,,,,,myuser@somehost$

Please show the output of the following command:
Code:
od -c aaa.txt

... and tell us your OS and version of sed you are using.
# 7  
Old 07-29-2013
Quote:
Originally Posted by snayper
input-output:
Code:
alma@app2:/home/snayper$ cat aaa.txt
"","","","","","","","",""
"","","","","","","","",""alma@app2:/home/snayper$ sed 's/"[^"]*"//g' ./aaa.txt
,,,,,,,,
alma@app2:/home/snayper$

There seems to be a little bit of a language barrier. With this example, I now understand what you were saying in your first message in this thread.

The sed utility (and most editors and text processing utilities meant to run on most UNIX and Linux systems) only have defined behavior when the input file is a text file. In particular sed commands work on input lines. When the input file contains text that is not terminated by a <newline> character (or as you said "doesn't has enter in the end of line"), the input is not a text file because it does not end with a <newline> character. By definition, a line ends with a <newline> character. The sed utility isn't processing the last "row" in your input file because it is not a line. As zaxxon has pointed out, this will work on some systems, but the standards do not require it to work.

On many versions of vi, if you try to edit a file that is missing the terminating <newline> character with the command:
Code:
vi aaa.txt

the status line at the bottom of the screen when you open the file will show something like:
Code:
"aaa.txt" [noeol]

meaning it did not find an End-Of-Line character at the end of the file. If you then enter the command :w followed by hitting the Enter (or return or carriage-return) key on your keyboard, vi will then add the missing <newline> character to the end of the file and sed will work as you expect.

If you have a list of files that you know are missing the trailing <newline>, you could also do something like:
Code:
for f in filename1 filename2 ...
do      echo >> "$f"
done

where filename1, filename2, and ... are replaced by the names of the files you want to fix. If you give this script the name of a file that already has a <newline> at the end of the file, it will add an empty line to the end of the file.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Re align in one row using sed

Hi, Anyone can help on how to re align my data in one row using sed. test.csv "url1","abc","project url1" 2016-08-16 "url2,"microsoft","project url2" 2016-08-18 need output like this "url1","abc","project url1","2016-08-16" "url2,"microsoft","project url2","2016-08-18" Thanks in... (8 Replies)
Discussion started by: fspalero
8 Replies

2. Shell Programming and Scripting

Insert row without deleting previous data using sed

Hello, I want to add a new row to a file to insert data without deleting the previous data there. Example: file a b c d Output a b newtext c (6 Replies)
Discussion started by: joseamck
6 Replies

3. Shell Programming and Scripting

awk/sed to get unique row

Hello ALL, I have very huge file almost 25G size contents of the file are "|" delimited columns on each row eg: 1396745|1078529|KDS|2011-04-21 00:00:00.0|1100|30|2|2011-04-20 22:35:24.0|2011-04-20 22:35:24.0|0|2011-04-21 00:00:00.0|1100|2222434|2011-04-21 11:00:00.0|0|0|2011-06-29... (10 Replies)
Discussion started by: posner
10 Replies

4. Shell Programming and Scripting

Replace last row of a column in bash/awk/sed

Hi, I've got a file with 3 columns which ends like this: ... 1234 345 1400 5287 733 1400 8472 874 1400 9317 726 1400 I want to replace the last row of the last column with the value 0. So my new file will end: ... 1234 345 1400 5287 733 1400 8472 874 1400 9317 726 ... (5 Replies)
Discussion started by: jhunter87
5 Replies

5. Shell Programming and Scripting

SED: delete matching row and 4 next rows?

Hi, Tried to look for solution, and found something similar but could not adapt the solution for my needs.. I'm trying to match a pattern (in this case "ProcessType")in a logfile, then delete that line and the 4 following lines. The logfile looks as follows: ProcessType: PROCESS_A... (5 Replies)
Discussion started by: Juha
5 Replies

6. Shell Programming and Scripting

help with sed to add delimiter and new field to each row

I have a file with millions of rows that I need to add a delimiter and a new field with a zero to the end of each row. (its too big to open and do a find and replace regex) I'm looking for the next line '\n' and need to replace it with a Unit Separator (hex \037) 0 \n. I've tried the... (2 Replies)
Discussion started by: kmac
2 Replies

7. Shell Programming and Scripting

Add row, awk, sed ?

I wrote script in bash which generates this report: phrase1;phrase2;phrase3;phrase4;phrase5;phrase6;phrase7;phrase8 phrase9;phrase2;phrase10;phrase4;phrase11;phrase12;phrase13;phrase14 phrase15;phrase16;phrase17;phrase18;phrase19;phrase20;phrase21;phrase22 ... I would like add name only... (3 Replies)
Discussion started by: patrykxes
3 Replies

8. Shell Programming and Scripting

sed command to delete row

I want to use sed command to delete a matched row with a pattern. And I also want to delete previous and next row of that row. Which option can I use with sed ? (9 Replies)
Discussion started by: anhtt
9 Replies

9. Shell Programming and Scripting

How to assign value to a variable with row(using -n) returned by sed

Hi Friends, REQUIREMENT: Want to delete files from the current directory match with the same in the file test.txt set -x i=1 echo "i=$i" COUNT=`sed -n '$=' test.txt` echo "Count=$COUNT" while do "## Here is error##" FILETOREMOVE=`sed -n \'$i,1p\' test.txt` echo $FILETOREMOVE... (5 Replies)
Discussion started by: sourabhsharma
5 Replies

10. Shell Programming and Scripting

How to update a single row in a file with sed

Hi. I want to be able to update only one line in a file that matches a key using sed, but I can't seem to get this (the key is right at the beginning of each row) Here is what I have tried so far, but every row is being updated. I want the end result to be that the input file only has the single... (6 Replies)
Discussion started by: brendanf
6 Replies
Login or Register to Ask a Question