The p
命令输入sed
用于打印当前模式空间,即当前文本行。
您可以使用sed命令与p
从文件中打印文本行的选项如下:
sed -n 'p' filename
在本教程中,您将了解使用sed
p
用于打印文件或数据流中的行的命令。
打印特定行
您可以使用sed
打印文件中的特定行。例如,如果要打印文件中的第 5 行,可以使用以下命令:
sed -n '5p' filename
在此命令中,-n
抑制图案空间的自动打印和5p
指示sed
打印文件的第 5 行。
打印多行
要打印文件中的一系列行,请使用以下语法:
sed -n 'X,Yp' filename
Where X
是起始线并且Y
是终点线。
例如,要从文件中打印第 10 行到第 20 行,请使用以下命令:
sed -n '10,20p' filename
此命令将从文件中打印第 10 至 20 行。
抑制图案空间的自动打印
默认情况下,sed
将输入文件的每一行打印到终端。
The -n
选项抑制模式空间的自动打印,这意味着sed
除非明确告知,否则不会打印任何内容。
例如,考虑一个名为example.txt
包含以下内容:
1. This is line 1
2. This is line 2
3. This is line 3
4. This is line 4
5. This is line 5
如果您运行以下命令:
sed 'p' example.txt
输出将是:
1. This is line 1
1. This is line 1
2. This is line 2
2. This is line 2
3. This is line 3
3. This is line 3
4. This is line 4
4. This is line 4
5. This is line 5
5. This is line 5
每行打印两次,因为sed
自动打印图案空间和p
命令还打印模式空间。
要禁止自动打印图案空间,请使用-n
option:
sed -n 'p' example.txt
现在,输出将是:
1. This is line 1
2. This is line 2
3. This is line 3
4. This is line 4
5. This is line 5
打印与图案匹配的线条
如果要打印包含特定单词的文件中的所有行,可以使用以下命令:
sed -n '/error/p' filename
在此命令中,/error/p
指示sed
仅打印包含单词“error”的行。
考虑一个名为logs.txt
包含以下内容:
INFO: Starting the application
ERROR: Failed to start the application
INFO: Retrying to start the application
ERROR: Failed to start the application again
INFO: Application started successfully
如果您运行以下命令:
sed -n '/ERROR/p' logs.txt
输出将是:
ERROR: Failed to start the application
ERROR: Failed to start the application again
仅打印包含单词“ERROR”的行。
打印与图案不匹配的线条
您可以使用!
之前的符号p
命令输入sed
打印与特定模式不匹配的行
sed -n '/error/!p' filename
在此命令中,/error/!p
指示sed
仅打印不包含单词“error”的行。
使用相同的logs.txt
如果运行以下命令,则从上一个示例中获取文件:
sed -n '/ERROR/!p' logs.txt
输出将是:
INFO: Starting the application
INFO: Retrying to start the application
INFO: Application started successfully
仅打印不包含单词“ERROR”的行。
在匹配图案之前/之后打印线条
With sed
,您还可以在与特定模式匹配的行之前或之后打印行。
在比赛前打印行数
要在与特定模式匹配的行之前打印行,可以使用以下语法:
sed -n '/pattern/{x;p;d;}; x' filename
例如,要在与单词“ERROR”匹配的行之前打印 1 行,可以使用以下命令:
sed -n '/successfully/{x;p;d;}; x' logs.txt
使用logs.txt
从前面的示例中获取文件,此命令将输出:
ERROR: Failed to start the application again
比赛结束后打印行数
要在匹配特定模式的行之后打印行,可以使用以下语法:
sed -n '/pattern/{n;p;q;}' filename
例如,要在与单词“ERROR”匹配的行后打印 1 行,可以使用以下命令:
sed -n '/ERROR/{n;p;q;}' logs.txt
使用logs.txt
从前面的示例中获取文件,此命令将输出:
INFO: Retrying to start the application
INFO: Application started successfully
打印直至形成图案
您可以使用sed
打印从文件开头到匹配特定模式的行的所有行。
其语法如下:
sed -n '/pattern/q;p' filename
例如,要打印文件中直到包含单词“stop”的行的所有行,可以使用以下命令:
sed -n '/stop/q;p' filename
/stop/q
– 这部分命令告诉sed
退出 (q
)当它遇到包含模式“stop”的行时。
考虑一个名为content.txt
包含以下内容:
This is the first line.
This is the second line.
stop
This is the fourth line.
This is the fifth line.
如果您运行以下命令:
sed -n '/stop/q;p' content.txt
输出将是:
This is the first line.
This is the second line.
打印从文件开头到包含单词“stop”的行的所有行。
在两个图案之间打印线条
您可以使用sed
打印两个指定模式之间的行。这对于从文件中提取特定的文本块非常有用。
其语法如下:
sed -n '/pattern1/,/pattern2/p' filename
Where pattern1
是起始模式并且pattern2
是结束模式。
例如,要打印文件中包含“Start”和“End”的行之间的所有行,可以使用以下命令:
sed -n '/Start/,/End/p' filename
考虑一个名为section.txt
包含以下内容:
This is some text.
Start
This is the section you want to extract.
It contains multiple lines.
End
This is some more text.
如果您运行以下命令:
sed -n '/Start/,/End/p' section.txt
输出将是:
Start
This is the section you want to extract.
It contains multiple lines.
End
包含“Start”和“End”的行之间的所有行都将被打印,包括它们。
要排除“Start”和“End”,可以使用删除命令(d
) 像这样:
sed -n '/Start/,/End/ { /Start/d; /End/d; p }' section.txt
输出将是:
This is the section you want to extract.
It contains multiple lines.
打印特定行
打印特定行号的语法如下:
sed -n 'Xp;Yp' filename
Where X
and Y
是您要打印的行号。
例如,要打印文件中的第 3 行和第 5 行,可以使用以下命令:
sed -n '3p;5p' filename
考虑一个名为data.txt
包含以下内容:
1. Apple
2. Banana
3. Cherry
4. Date
5. Elderberry
如果您运行以下命令:
sed -n '3p;5p' data.txt
输出将是:
3. Cherry
5. Elderberry
仅打印第 3 行和第 5 行。
打印从特定行开始到结束的行
您可以使用sed
打印从特定行号开始到文件末尾的所有行,如下所示:
sed -n 'X,$p' filename
Where X
是起始行号。
例如,要打印从第 3 行开始的所有行,可以使用以下命令:
sed -n '3,$p' filename
使用data.txt
上一个示例中的文件:
sed -n '3,$p' data.txt
输出将是:
3. Cherry
4. Date
5. Elderberry
打印从第三行到文件末尾的所有行。
打印与正则表达式匹配的行
打印与 a 匹配的行的语法正则表达式如下:
sed -n '/regex/p' filename
例如,要打印文件中以字母“A”开头的所有行,可以使用以下命令:
sed -n '/^A/p' filename
在此命令中,^A
是一个正则表达式,匹配以字母“A”开头的任何行。
考虑一个名为fruits.txt
包含以下内容:
Apple
Banana
Apricot
Date
Avocado
如果您运行以下命令:
sed -n '/^A/p' fruits.txt
输出将是:
Apple
Apricot
Avocado
仅打印以字母“A”开头的行。
打印与正则表达式不匹配的行
您还可以使用sed
打印与特定正则表达式不匹配的行,如下所示:
sed -n '/regex/!p' filename
例如,要打印文件中不以字母“A”开头的所有行,可以使用以下命令:
sed -n '/^A/!p' filename
在此命令中,^A
是一个正则表达式,匹配以字母“A”开头的任何行。
使用fruits.txt
如果运行以下命令,则从上一个示例中获取文件:
sed -n '/^A/!p' fruits.txt
输出将是:
Banana
Date
仅打印不以字母“A”开头的行。
打印包含特殊字符的行
当处理特殊字符时,例如*
, .
, /
, \
, &
, |
, [
, ]
, {
, }
, (
, )
, ^
, and $
,你必须用反斜杠转义它们\
为了从字面上匹配它们。
打印包含特殊字符的行的语法如下:
sed -n '/\character/p' filename
例如,要打印包含以下内容的文件中的所有行*
字符,可以使用以下命令:
sed -n '/\*/p' filename
考虑一个名为special.txt
包含以下内容:
This is a test.
This line contains * character.
This is another test.
如果您运行以下命令:
sed -n '/\*/p' special.txt
输出将是:
This line contains * character.
仅包含以下行*
字符被打印。
打印前修改
sed
允许您在使用以下组合打印行时修改行p
命令与其他命令,例如s
(代替)。
将 (p) 与替换 (s) 命令结合起来
The s
命令输入sed
是用来代换。当你结合时p
with s
, sed
将替换指定的文本,然后打印该行。
其语法如下:
sed -n 's/pattern/replacement/p' filename
例如,要将单词“test”替换为“exam”,然后打印该行,可以使用以下命令:
sed -n 's/test/exam/p' filename
使用test.txt
如果运行以下命令,则从上一个示例中获取文件:
sed -n 's/test/exam/p' test.txt
输出将是:
This is a exam.
This is another exam.
“test”一词被“exam”替换,并打印出这些行。
打印多个输入文件
当您提供多个输入文件时,sed
将按照列出的顺序依次处理它们。
使用的语法sed
p
具有多个输入文件的命令如下:
sed -n 'p' file1 file2 ... fileN
例如,要打印两个文件的第三行,data1.txt
and data2.txt
,您可以使用以下命令:
sed -n '3p' data1.txt data2.txt
考虑两个文件,data1.txt
and data2.txt
,内容如下:
数据1.txt:
1. Apple
2. Banana
3. Cherry
数据2.txt:
4. Date
5. Elderberry
6. Fig
如果您运行以下命令:
sed -n '3p' data1.txt data2.txt
输出将是:
3. Cherry
6. Fig
打印每个文件的第三行。