如何使用 sed 仅隔离文件的第一部分
How to use sed to isolate only the first part of a file
我 运行宁 Windows 并且拥有 GnuWin32 工具包,其中包括 sed。具体来说:
C:\TEMP>sed --version
GNU sed 版本 4.2.1
我有一个包含两个部分的文本文件:一个是我想保留的固定部分,另一个是在 运行 完成作业后附加的部分。
文件中有一个唯一字符串,用于标识所添加部分的开头,我想使用 Gnu sed 仅隔离唯一字符串之前的文件部分 - 即,这样我就可以每次作业 运行.
时,将不同的数据附加到固定部分
我知道我可以将固定部分保存在一个单独的文件中,但这会增加复杂性,如果我可以在同一个文件的开头重用数据会更优雅。
很久以前我就知道如何设置 sed 脚本,而且我确信这可以用 sed 完成,但从那时起我就睡着了。 :)
能否请您描述一下如何使用 sed 显示文件中不包括特定字符串的文本行?
示例:
line 1 of fixed portion
line 2 of fixed portion
unique string
line 1 of appended portion
line 2 of appended portion
line 3 of appended portion
我希望看到的输出是:
line 1 of fixed portion
line 2 of fixed portion
我已经达到了:
sed -r -n -e "0,/unique string/p"
但这也会打印出唯一的字符串。
提前致谢。
-诺尔
这应该适合你:
sed -n '/unique string/q;p' file
它在 unique string
处退出处理。打印其他行。
另一种方法可能是使用这样的范围地址:
sed -n '1,/unique string/{/unique string/!p}' file
请注意 sed
包括范围边界。我们需要从打印中排除 unique string
。
此外,我正在使用 -n
选项,这使得 sed
默认情况下抑制输入行的输出。
有一件事,如果 unique string
可以包含在正则表达式中也是语法字符的字符,例如 ...
test*
... sed
可能不再适合这项工作,因为它只能匹配正则表达式,但不能匹配 固定字符串 .
在这种情况下,awk
可能是首选工具:
awk 'index("*unique string*"){exit}1' file
index("string")
returns 如果已找到字符串,则为非零值(位置)。在这种情况下,我们取消对输入行的进一步处理,也不打印该行。
尾随 1
的计算结果始终为真,并使 awk
打印所有行,直到前一个条件适用。
我 运行宁 Windows 并且拥有 GnuWin32 工具包,其中包括 sed。具体来说:
C:\TEMP>sed --version
GNU sed 版本 4.2.1
我有一个包含两个部分的文本文件:一个是我想保留的固定部分,另一个是在 运行 完成作业后附加的部分。
文件中有一个唯一字符串,用于标识所添加部分的开头,我想使用 Gnu sed 仅隔离唯一字符串之前的文件部分 - 即,这样我就可以每次作业 运行.
时,将不同的数据附加到固定部分我知道我可以将固定部分保存在一个单独的文件中,但这会增加复杂性,如果我可以在同一个文件的开头重用数据会更优雅。
很久以前我就知道如何设置 sed 脚本,而且我确信这可以用 sed 完成,但从那时起我就睡着了。 :)
能否请您描述一下如何使用 sed 显示文件中不包括特定字符串的文本行?
示例:
line 1 of fixed portion
line 2 of fixed portion
unique string
line 1 of appended portion
line 2 of appended portion
line 3 of appended portion
我希望看到的输出是:
line 1 of fixed portion
line 2 of fixed portion
我已经达到了:
sed -r -n -e "0,/unique string/p"
但这也会打印出唯一的字符串。
提前致谢。
-诺尔
这应该适合你:
sed -n '/unique string/q;p' file
它在 unique string
处退出处理。打印其他行。
另一种方法可能是使用这样的范围地址:
sed -n '1,/unique string/{/unique string/!p}' file
请注意 sed
包括范围边界。我们需要从打印中排除 unique string
。
此外,我正在使用 -n
选项,这使得 sed
默认情况下抑制输入行的输出。
有一件事,如果 unique string
可以包含在正则表达式中也是语法字符的字符,例如 ...
test*
... sed
可能不再适合这项工作,因为它只能匹配正则表达式,但不能匹配 固定字符串 .
在这种情况下,awk
可能是首选工具:
awk 'index("*unique string*"){exit}1' file
index("string")
returns 如果已找到字符串,则为非零值(位置)。在这种情况下,我们取消对输入行的进一步处理,也不打印该行。
尾随 1
的计算结果始终为真,并使 awk
打印所有行,直到前一个条件适用。