我有一个文件entry.txt,其文本如下
$ cat entry.txt
>Main entry
This is some text to try
how to substitute the first
line of the text.
我想通过搜索字符来替换第一行>
并添加一些存储在变量中的文本:
$ var=TITLE
$ sed -i "s/>*/$var/" entry.txt
$ cat entry.txt
TITLEMain entry
TITLEThis is some text to try
TITLEhow to substitute the first
TITLEline of the text.
我怎么能够
>
替换包含且不>
单独的整行只替换第一行而不替换其他行?
谢谢。
您的模式应该
^>.*
仅匹配以>
(^>
) 开头的行并匹配该行 ( ) 中的其他所有内容.*
。所以:如果您提供了预期的输出,那将会很有帮助,尽管我想我可以猜测您想要的大部分内容。您的测试用例仅解决替换“>”的要求,而不是第一行约束。它也没有解决“>”不是行中第一个字符的情况。使用“-e”(将标准输入更改为标准输出)而不是“-i”(就地编辑文件)测试 sed 更容易。
也许我们尝试不同的测试用例:
这里的模式表示匹配零个或多个“>”实例,但您确实希望匹配至少一个实例。您打算如何处理多个实例?是否应该仅在行的开头进行匹配?)
这看起来好一点了。
然而,要让 sed只更改第一行要困难得多。使用 Gnu sed,这是可能的:
在传统的 sed 中可能可以通过其他方式实现,但我已经放弃并使用 awk 来实现这一点。