====== Linux ====== ===== SED ===== \\ | SED Cheat sheet |{{:linux:commandes_utiles:sed_cheat_sheet.png?linkonly |}}| \\ ==== Syntaxe ==== $ sed [options] command [input-file] * Exemples avec pipeline $ cat report.txt | sed 's/Nick/John/g' $ echo '123abc' | sed 's/[0-9]+//g' * commandes multiples $ echo "hello world" | sed -e 's/h/H/g' -e 's/w/W/g' Hello World * Script sed $ echo 's/h/H/g' >> hello.sed $ echo 's/w/W/g' >> hello.sed $ echo "hello world" | sed -f hello.sed Hello World \\ ---- ==== Options ==== ^Option ^Example ^Description ^ |**-i** |''sed -ibak 's/On/Off/' php.ini'' |Backup and modify input file directly | |**-E** |''sed -E 's/[0-9]+//g' input-file'' |Use extended regular expressions | |**-n** |''sed -n '3 p' config.conf'' |Suppress default pattern space printing | |**-f** |''sed -f script.sed config.conf'' |Execute sed script file | |**-e** |''sed -e 'command1' -e 'command2' input-file'' |Execute multiple sed commands | \\ ---- ==== Commands ==== ^Command ^Example ^Description ^ |**p** |''sed -n '1,4 p' input.txt'' |Print lines 1-4 | |**p** |''sed -n -e '1,4 p' -e '6,7 p' input.txt'' |Print lines 1-4 and 6-7 | |**d** |''sed '1,4 d' input.txt'' |Print lines except 1-4 | |**w** |''sed -n '1,4 w output.txt' input.txt'' |Write pattern space to file | |**a** |''sed '2 a new-line' input.txt'' |Append line after | |**i** |''sed '2 i new-line' input.txt'' |Insert line before | ^Space commands ^^^ |**n** | |Print pattern space, empty pattern space, and read next line | |**x** | |Swap pattern space with hold space | |**h** | |Copy pattern space to hold space | |**H** | |Append pattern space to hold space | |**g** | |Copy hold space to pattern space | |**G** | |Append hold space to pattern space | ^Flags ^^^ | $ sed 's/old/new/[flags]' [input-file] ||| |**g** | |Global substitution | |**1,2...** | |Substitute the nth occurrence | |**p** | |Print only the substituted line | |**w** | |Write only the substituted line to a file | |**I** | |Ignore case while searching | |**e** | |Substitute and execute in the command line | ^Loops commands ^^^ |**b label** | |Branch to a label (for looping) | |**t label** | |Branch to a label only on successful substitution (for looping) | |**:label** | |Label for the b and t commands (for looping) | |**N** | |Append next line to pattern space | |**P** | |Print 1st line in multi-line | |**D** | |Delete 1st line in multi-line | ^Misc flags ^^^ |**/ | ^ @ ! #** | |Substitution delimiter can be any character | |**&** | |Gets the matched pattern | |**( ) \1 \2 \3** | |Group using ( and ). Use \1, \2 in replacement to refer the group | \\ \\ ---- ==== Recherche de texte ==== # Search for a string and only print the lines that were matched $ sed -n '/hello/p' file.txt # Case insensitive search $ sed -n '/hello/Ip' file.txt # Search for a string but only output lines that do not match $ sed -n '/hello/!p' file.txt ==== Remplacement de texte ==== # Replace all occurrences of a string $ sed 's/old/new/g' file.txt # Replace only the nth occurrence of a string $ sed 's/old/new/2' file.txt # Replace replace a string only on the 5th line $ sed '5 s/old/new/' file.txt # Replace "world" with "universe" but only if the line begins with "hello" $ sed '/hello/s/world/universe/' file.txt # Remove "" from the end of each line $ sed 's/\\$//' file.txt # Remove all whitespace from beginning of each line $ sed 's/^\s*//' file.txt # Remove comments. Even those that are at the end of a line $ sed 's/#.*$//' file.txt ==== Ajout de texte ==== # Append line after line 2 $ sed '2a Text after line 2' file.txt # Append line at the end of the file $ sed '$a THE END!' file.txt # Append line after every 3rd line starting from line 3 $ sed '3~3a Some text' file.txt # Insert text before line 5 $ sed '5i line number five' file.txt # Insert "Example: " before each line that contains "hello" $ sed '/hello/i Example: ' file.txt ==== Numérotation ==== # Number line of a file (simple left alignment) $ sed = file.txt | sed 'N;s/\n/\t/' # Number line of a file (number on left, right-aligned) $ sed = file.txt | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /' # Number line of file, but only print numbers if line is not blank $ sed '/./=' file.txt | sed '/./N; s/\n/ /' # Count lines (emulates "wc -l") $ sed -n '$=' ==== Effacement de texte ==== # Delete line 5-7 in file $ sed '5,7d' file.txt # Delete every 2nd line starting with line 3 $ sed '3~2d' file.txt # Delete the last line in file $ sed '$d' file.txt # Delete lines starting with "Hello" $ sed '/^Hello/d' file.txt # Delete all empty lines $ sed '/^$/d' file.txt # Delete lines starting with "#" $ sed '/^#/d' file.txt ==== Gestion des espaces ==== # Double space $ sed G # Delete all blank lines and double space $ sed '/^$/d;G' # Triple space a file $ sed 'G;G' # Undo double-spacing $ sed 'n;d' # Insert a blank line above line which matches "regex" $ sed '/regex/{x;p;x;}' # Insert a blank line below line which matches "regex" $ sed '/regex/G' # Insert a blank line around line which matches "regex" $ sed '/regex/{x;p;x;G;}' ==== Exemples ==== * Liste de fichiers de moins de 30 jours, ordonnée par date dans le répertoire spécifié seulement $ find ./* -prune -name "**" -mtime 30 | xargs -exec ls -ltr \\