如何使用sed仅隔离文件的第一部分

如何使用sed仅隔离文件的第一部分,sed,gnu,Sed,Gnu,我正在运行Windows,有GnuWin32工具包,其中包括sed。具体而言: C:\TEMP>sed--版本 GNU sed版本4.2.1 我有一个包含两部分的文本文件:一部分是我想要保留的固定部分,另一部分是运行作业后追加的部分 文件中有一个唯一的字符串,用于标识所添加部件的开始,我想使用Gnu sed仅隔离文件中唯一字符串之前的部件,即,每次运行作业时,我都可以将不同的数据附加到固定部件 我知道我可以将固定的部分保存在一个单独的文件中,但这增加了复杂性,如果我可以在同一个文件的开头重用数据

我正在运行Windows,有GnuWin32工具包,其中包括sed。具体而言:

C:\TEMP>sed--版本

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"
但这也会打印出唯一的字符串

提前谢谢


-Noel

这应该适合您:

sed -n '/unique string/q;p' file
它在
唯一字符串处退出处理。其他行被打印出来

另一种方法是使用如下范围地址:

sed -n '1,/unique string/{/unique string/!p}' file
请注意,
sed
包括范围边界。我们需要从打印中排除
唯一字符串

此外,我正在使用
-n
选项,该选项使
sed
在默认情况下抑制输入行的输出


有一件事,if
unique string
可以包含一些字符,这些字符在正则表达式中也是语法字符,比如

test*
sed
可能不再是该作业的合适工具,因为它只能匹配正则表达式而不能匹配固定字符串

在这种情况下,
awk
可能是选择的工具:

awk 'index("*unique string*"){exit}1' file
索引(“字符串”)
如果找到字符串,则返回非零值(位置)。在这种情况下,我们取消了对输入行的进一步处理,也不打印该行


尾随的
1
始终计算为true,并使
awk
打印所有行,直到前一个条件适用。

太棒了,谢谢!简单明了,有两种选择。只要系统允许,我会选择这个作为答案。Sed似乎非常乐意匹配正则表达式中使用的字符,只要它们被转义。在任何情况下,我都可以控制唯一字符串中的内容。当然,只要你有控制权,你就可以转义特殊的正则表达式字符,或者你甚至可以利用你可以传递正则表达式这一事实。