Difference between revisions of "Linux command: sed"
Rafahsolis (talk | contribs) |
Rafahsolis (talk | contribs) Tag: visualeditor |
||
| (5 intermediate revisions by the same user not shown) | |||
| Line 11: | Line 11: | ||
<nowiki>echo "esto es un ejemplo" | sed 's#e#R#g'</nowiki> | <nowiki>echo "esto es un ejemplo" | sed 's#e#R#g'</nowiki> | ||
| − | == Replace New Line Characters == | + | ==Replace New Line Characters== |
sed ':a;N;$!ba;s/\n/ /g' | sed ':a;N;$!ba;s/\n/ /g' | ||
This will read the whole file in a loop, then replaces the newline(s) with a space.<br /> | This will read the whole file in a loop, then replaces the newline(s) with a space.<br /> | ||
| Line 23: | Line 23: | ||
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | ||
| − | == Replace New Line (\n) with ", " == | + | ==Replace New Line (\n) with ", "== |
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/", "/g' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/", "/g' | ||
| − | == Uppercase to lowercase == | + | tr -d '\n' |
| + | |||
| + | ==Uppercase to lowercase== | ||
sed 's/.*/\L\1/g' < input | sed 's/.*/\L\1/g' < input | ||
| + | |||
| + | ==Mongo operators to Python List== | ||
| + | cat mongodb_operators.txt | grep -E ^\\\$ | awk '{ print "\x27" $1 "\x27" }' | sed s/\\\$//g | sed ':a;N;$!ba;s/\n/, /g' | ||
| + | |||
| + | ==Print some line of a file== | ||
| + | To print line 45 from file rigodon-22011715-3.jl.ok | ||
| + | sed -n 45p rigodon-22011715-3.jl.ok | ||
| + | |||
| + | To print multiple lines: | ||
| + | sed -n -e 5p -e 8p file | ||
| + | To print a range of lines: | ||
| + | sed -n 5,8p file | ||
| + | To print a range and some specific file: | ||
| + | sed -n -e 5,8p -e 10p file | ||
| + | |||
| + | ==Remove empty lines== | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | sed -i '/^$/d' file.txt | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | == Remove white spaces == | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | sed -e 's/^[ \t]*//' | ||
| + | </syntaxhighlight> | ||
Latest revision as of 13:43, 25 September 2023
The sed command can be used for varius things see man page:
sed command man page
An example of use of sed to replace characters:
echo <string to replace> | sed <regular expression>
Regular expresion:
s -> replace.
g -> all the 'e' are replaced with 'R'. without g only one 'e' is replaced.
# -> delimitation character can be: {|, /, #}.
Example:
echo "esto es un ejemplo" | sed 's#e#R#g'
Replace New Line Characters
sed ':a;N;$!ba;s/\n/ /g'
This will read the whole file in a loop, then replaces the newline(s) with a space.
Explanation:
Create a label via :a.
Append the current and next line to the pattern space via N.
If we are before the last line, branch to the created label $!ba ($! means not to do it on the last line as there should be one final newline).
Finally the substitution replaces every newline with a space on the pattern space (which is the whole file).
Here is cross-platform compatible syntax which works with BSD sed (as per @Benjie comment):
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g'
Replace New Line (\n) with ", "
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/", "/g'
tr -d '\n'
Uppercase to lowercase
sed 's/.*/\L\1/g' < input
Mongo operators to Python List
cat mongodb_operators.txt | grep -E ^\\\$ | awk '{ print "\x27" $1 "\x27" }' | sed s/\\\$//g | sed ':a;N;$!ba;s/\n/, /g'
Print some line of a file
To print line 45 from file rigodon-22011715-3.jl.ok
sed -n 45p rigodon-22011715-3.jl.ok
To print multiple lines:
sed -n -e 5p -e 8p file
To print a range of lines:
sed -n 5,8p file
To print a range and some specific file:
sed -n -e 5,8p -e 10p file
Remove empty lines
sed -i '/^$/d' file.txt
Remove white spaces
sed -e 's/^[ \t]*//'