在 Mac OS X 上将一个文件中的文本打印到另一个文件中

在 Mac OS X 上将一个文件中的文本打印到另一个文件中

下面的脚本着眼于在另一个名为 newfile.txt 的文件中打印 file1.txt 中第一次出现模式“Word1 word2”之后的任何文本:

sed -n -e 's/^.*Word1 word2/\1/p' file1.txt > newfile.txt

当我在终端中输入此内容时,没有任何反应(我也没有收到错误消息)。请注意,我在 Mac OS X 上使用 UNIX。

答案1

命令

sed -n -e 's/^.*Word1 word2/\1/p' file1.txt

定义不明确,因为替代命令的右侧包含反向引用,但左侧没有捕获组。 Linux 中的 GNU sed 4.7 给出错误消息“‘s’命令的 RHS 上的引用 \1 无效”。

由于要求打印第一次出现“Word1 word2”后的文本,因此我们不能仅仅使用,.*Word1 word2因为这.*是贪婪的。相反,我们将使用一个技巧,将第一个转换Word1 word2为单个字符,然后删除到该字符为止。任何未使用的字符都可以,但换行符是一个不错的选择,因为 sed 在读取每一行时都会删除换行符,并在打印行时添加一个换行符。所以我们有

sed -n -e 's/Word1 word2/\n/;s/^.*\n//p' file1.txt > newfile.txt

如果需要“Word1 word2”,则使用

sed -n -e 's/Word1 word2/\n&/;s/^.*\n//p' file1.txt > newfile.txt

相关内容