Shell programming --- sed command explanation
Sed is a non-interactive text editor that can edit text files and standard input.
Sed only edits the copy of the original file in the buffer, not the original file
Sed command invocation Methods
1. Output a command in the shell command line to call sed
Sed [option] 'sed cmd' file
2. Insert the sed command into the script.
Sed [option]-f'sed. Sh' file
# Vi sed. sh sed: the script to be called is sed. sh
#/File:/a \ This is a test line !!!
Call scripts
# Sed-f sed. sh test
3. Insert the sed command into the script and execute it directly.
./Sed. sh file
# Vi sed. sh sed script
#! /Bin/sed-f
#/File:/a \ This is a test line !!!
#./Sed. sh test run the script
Sed Command Options and Significance
-N # do not print all rows to standard output
-E # indicates parsing the Next string as the sed edit command. If only one edit command is passed to sed, the-e option can be omitted.
-F # Call the sed script file
Sed command to locate text
X # x indicates the specified row number.
X, y # specifies the row number range from x to y
/Pattern/# query rows in the contain Mode
/Pattern/# query rows that contain two modes
/Pattern/, x # the line from the matched row with pattern to the row between x
X,/pattern/# the line from Line x to the matched line with pattern
X, y! # Querying rows that do not contain rows of rows x and y
Sed edit command
P # print matching rows
= # Print the file line number
A \ # append text information after locating the row number
I \ # insert text information before locating the row number
D # delete a row
C # Replace positioning text with new text
S # replace the corresponding mode with the replacement Mode
R # Read text from another file
W # write text to a file
Y # character conversion
Q # exit after the first pattern match is complete
L # display control characters equivalent to octal ASCII codes
{}# Command group executed on the target line
N # Read the next input line and use the next command to process the new line
H # copy the text in the mode buffer to keep the buffer
H # append the text in the mode buffer to the keep buffer
X # swap mode buffer and keep buffer content
G # copy the content of the buffer to the mode Buffer
G # append the content of the buffer to the mode buffer.
========================================================== ========================================================== ======
Sed example
Print the first line
# Sed-n '1p' test
Print all content, and there are two first rows
# Sed '1p' test
Print 3-6 lines of text
# Sed-n'3, 6p' test
Pattern Match: print the row containing certificate
# Sed-n'/certificate/P' test
Sed [-e]: parses the Next string into a sed edit command.
(1) print the content of the certificate matching mode
(2) print the line number of the certificate matching mode
(3) print the content and row number of the certificate matching mode.
# Sed-n'/certificate/P' test
# Sed-n'/certificate/= 'test
# Sed-n-e '/certificate/p'-e'/certificate/= 'test
The general format of sed with multiple editing commands is
# Sed [option]-e cmd1-e cmd2-e cmdn inputfile
Append the following content to the text string file: This is a test file !!!
# Sed '/file:/a \ This is a test file !!! 'Test
Append the wanglei user to the root of the/etc/passwd text.
# Sed-I '/root: x: 0: 0/a \ wanglei: x: 0: 0: wanglei:/bin/bash'/etc/passwd
Print the line containing. characters in the text test.
# Sed-n'/\./P' test
Print the row containing the $ character in the text test.
# Sed-n'/\ $/P' test
Print the last line in the text test.
# Sed-n' $ P' test
Print the rows that end with the bus string
# Sed-n'/. * bus $/P' test
Print the rows between 2 and 10
# Sed-n' 2, 10! P'test
Print all rows except the string certificate
# Sed-n'/certificate /! P'test
Insert the content "This is a test line !!! ", And saved in the file
# Sed-I '/above/I \ @ This is a test line !!! 'Test
Print the content of the above string to 13 lines in the text test.
# Sed-n'/above/, 13p' test
Print 3 rows to the string/home/globus/. In the text test.
# Sed-n'3, // home \/globus \/\./P' test
Insert a line "This is a test \ I line!" in front of the test text $88 string !!! "
# Sed '/\ $88/I \ This is a test \ I line !!! 'Test
Replace the text line of the matched string with the new text in \ c
# Sed '/specified address/c \ test' file
Replace the line matching the above string in the text with the new line "This is a new line !!! "
# Sed '/above/c \ This is a new line !!! 'Test
Replace lines 1, 5, and 13 in the text with "This is a 1 line !!! "(1, 5, 13)
# Sed-e '1c \ This is a 1 line !!! '-E' 5c \ This is a 5 line !!! '-E' 13c \ This is a 13 line !!! 'Test
Delete row 3rd from the test text
# Sed '3d 'test
Delete 1-3 rows in the test text
# Sed '1, 3d 'test
Delete the content of the string above to 13 in the test text.
# Sed '/above/, 13d' test
Delete the last line of text
# Sed '$ d' test
Delete 5 rows to the last row
# Sed '5, $ d' test
Delete the line of the case-insensitive string certificate in the text
# Sed '/[Cc] [Ee] [Rr] [Tt] [Ii] [Ff] [Ii] [Cc] [Aa] [Tt] [Ee]/d' test
Replace text # replace one or more strings
S/replaced string/New String/[replacement option]
G # indicates all the characters in the replaced text that appear in the replaced string.
P # combined with the-n option, only replace rows are printed
W file name # indicates directing the output to a file
# Sed-n's/replaced string/New String/P' input file
Replace the Certificate string in the test file with CERTIFICATE (replace only the previous one if there are multiple strings in the same industry)
# Sed-n's/certificate/CERTIFICATE/P' test
Replace all the strings in the test file with the shabi and save them to the/root/char file.
# Sed-n's/above/shabi/pg w/root/char 'test
Replace the string in the test text, replace the above with char, and replace the second char in each line in the text.
# Sed-n's/above/char/2p 'test
Replace the character string in the test text, replace the above with the charset, replace the 6th above in each line in the text, and save it to/root/save
# Sed-n's/above/charset/6 p w/root/save 'xx
Replace the CERTIFICATE string in test with oye and save it as oye.
# Sed-n's/CERTIFICATE/oye/pg w oye 'test
& Can be used to save the replaced string for calling. & the symbol is equivalent to the string before replacement.
# Sed-n's/seu/(&)/pg 'test
# Sed-n's/seu/(seu)/pg 'test
Print 1-5 lines of the test file and write them to the output
# Sed-n'1, 5 w output 'test
Read the content of file xx to the end of the file test string above.
# Sed '/above/r xx' test
Read xx contents of the file to the end of line 3 of the file test.
# Sed '5r xx' test
Read the contents of file xx to the end of line 5-7 of file test.
# Sed '5, 7r xx' test
Read xx contents to lines 5, 7, and 12 of the test file.
# Sed-e '5r xx'-e '7r xx'-e '12r xx' test
Print the. r. * matching file in the test file.
# Sed-n'/. r. */P' test
Print the. r. * matching file in the test file, and print only the first line that matches.
# Sed '/. r. */Q' test
========================================================== ============================
Conversion command y
It indicates character conversion. It converts a series of characters into corresponding characters and processes the characters one by one. Processing 1, processing 2...
# Sed 'y/transformed Character Sequence 'input file
Convert all a, B, c, d, e, f, g, h, and I in the test file to numbers 1, 2, 3, 4, 5, 6, 7, 8, 9
# Sed 'y/abcdefghi/123456789/'test
Convert a, B, o, v, e, and character in the test file to A, B, O, V, E
# Sed 'y/above/ABOVE/'test
Replace 27 English letters with 1234567890-= '~! In the test file '~! @ # $ % ^ & * () _ +/
# Sed 'y/abcdefghijklmnopqrstuvwxyz/1234567890-= '~! @ # $ % ^ & * () _ +/'Test
Execute Command Group {} on the target line {}
# Sed-n'/Certificate/{p; =} 'test
Equivalent to: sed-n-e '/Certificate/p'-e'/Certificate/= 'test
In the test text, replace all the I of the row that matches the Certificate keyword with I, and replace the first le with 99.
# Sed '/Certificate/{s/I/I/g; s/le/99/;}' test
N # process the next row of matching rows
Replace the user character in the line under the certificate string in the test text with 99
# Sed '/certificate/{n; s/user/99/;}' test
Replace the \ character of the line under the certificate string in the test text with gang
# Sed '/certificate/{n; s/\\/ gang/;}' test
======================================
Sed buffer Processing
# Sed-e '/file1/H'-E'/file2/X'-e' $ G' xxx
1. h # copy the row matching file1 to keep the Buffer Zone
2. x # swap the rows that match file2 and the rows that keep the buffer (file1)
3.G # append the content of the buffer to the mode buffer $ as the last row.
Use semicolons to separate multiple edit commands-e {};
Print the line and line number of the Ceritificate string in the test file using semicolons.
# Sed-n'/Certificate/p;/Certificate/= 'test
Replace the characters matching file1 In the xxx file with wl, the matching file2 with fx, the matching file3 with ywc, and the matching file4 with ly.
# Sed's/file1/wl/; s/file2/fx/; s/file3/ywc/; s/file4/ly/; 'xxx
The following are the scripts used by the previous instance:
========================================================== ====================================
1 --- This is a read file1
2 --- This is a read file2
3 --- This is a read file3
4 --- This is a read file4
5 --- This is a read file5
6 --- This is a read file6
7 --- This is a read file7
========================================================== ====================================
1 \ This is a Certificate Request file:
2 \
3 \ It shoshould be meailed to zawu@seu.edu.cn
4 \
5 ============================================== ==================================
6 \ Certificate Subject:
7 \
8 \/O = Grid/OU = GlobusTest/OU = simpleca-seugridl.seu.edu.cn/ouw.seu.edu.cn/cnw.globus
9 \
10 \ the above string is known as your user certificate subject, and it uniquely identifies
11 \ this user. $88
12 \ To install this user certificate, please save this e-mail message into the following file.
13 \
14 \/home/globus/. globus/usercert. pem
15 \ fawnbusgfqa
16 \ fwafawfbus