如何使用sed仅隔离文件的第一部分
我正在运行Windows,有GnuWin32工具包,其中包括sed。具体而言: C:\TEMP>sed--版本 GNU sed版本4.2.1 我有一个包含两部分的文本文件:一部分是我想要保留的固定部分,另一部分是运行作业后追加的部分 文件中有一个唯一的字符串,用于标识所添加部件的开始,我想使用Gnu sed仅隔离文件中唯一字符串之前的部件,即,每次运行作业时,我都可以将不同的数据附加到固定部件 我知道我可以将固定的部分保存在一个单独的文件中,但这增加了复杂性,如果我可以在同一个文件的开头重用数据,那将更加优雅 很久以前,我知道如何设置sed脚本,我相信这可以通过sed完成,但从那时起我就一直在睡觉。:) 您能描述一下如何使用sed显示文件中的文本行(不包括特定字符串)吗 例如:如何使用sed仅隔离文件的第一部分,sed,gnu,Sed,Gnu,我正在运行Windows,有GnuWin32工具包,其中包括sed。具体而言: C:\TEMP>sed--版本 GNU sed版本4.2.1 我有一个包含两部分的文本文件:一部分是我想要保留的固定部分,另一部分是运行作业后追加的部分 文件中有一个唯一的字符串,用于标识所添加部件的开始,我想使用Gnu 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
在默认情况下抑制输入行的输出
有一件事,ifunique string
可以包含一些字符,这些字符在正则表达式中也是语法字符,比如
test*
sed
可能不再是该作业的合适工具,因为它只能匹配正则表达式而不能匹配固定字符串
在这种情况下,awk
可能是选择的工具:
awk 'index("*unique string*"){exit}1' file
索引(“字符串”)
如果找到字符串,则返回非零值(位置)。在这种情况下,我们取消了对输入行的进一步处理,也不打印该行
尾随的1
始终计算为true,并使awk
打印所有行,直到前一个条件适用。太棒了,谢谢!简单明了,有两种选择。只要系统允许,我会选择这个作为答案。Sed似乎非常乐意匹配正则表达式中使用的字符,只要它们被转义。在任何情况下,我都可以控制唯一字符串中的内容。当然,只要你有控制权,你就可以转义特殊的正则表达式字符,或者你甚至可以利用你可以传递正则表达式这一事实。