Delete all trailing blank lines at end of file using sed
Answer:
Blank lines at end of a text file are mostly useless, you can remove them easily using sed:
# sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Linux Ask! is a Q & A web site specific for Linux related questions. Questions are collected, answered and audited by experienced Linux users.
Delete all trailing blank lines at end of file using sed
Answer:
Blank lines at end of a text file are mostly useless, you can remove them easily using sed:
# sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Delete trailing spaces or tabs from end of each line
Answer:
To delete trailing spaces or tabs, i.e. whitespaces from end of each line, is easy with the sed command.
# sed 's/[ \t]*$//'
How to use sed to simulate grep -v?
Answer:
There are two methods to simulate grep -v (print out line(s) if not match) in sed.
# sed -n '/regexp/!p'
or
# sed '/regexp/d'
Capturing group difference in Basic Regular Expressions (BRE) and Extended Regular Expressions (ERE)
Answer:
One of the very confusion issue related to most GNU/Linux utils which are using regular expression library is they are mostly supporting the Basic Regular Expressions (BRE) by default.
E.g.
# echo "(foo)" | sed 's/\(foo\)/bar/gi'
You might expect the result is
bar
But the actual result is...
(bar)
Why the brackets are not replaced? It is because in BRE (which is the default, you don't need to escape, if you escape it, then it will be treated as a capturing group - which is quite non-sense if you came from programming background).
To solve the problem, you can just simply remove the \ escape, or you tell those commands to use ERE, e.g.
# echo "(foo)" | sed -r 's/\(foo\)/bar/gi'
bar
Replace infile using sed and make a backup automatically
Answer:
If you use the -i flag in sed, it will replace infile, which is quite dangerous if you don't have a backup.
E.g.
# sed -i 's/foo/bar/gi' input.txt
To auto make a backup when replacing in a file, you can use
# sed -i.bak 's/foo/bar/gi' input.txt
Now the original file will stored as input.txt.bak in the same directory that you are working.