下面是一个脚本,它打印删除“word”后“word”所在的整行文本,选择所有出现的“word”:
sed -ne 's/word//p' file.txt >> newfile.txt
如何仅打印第一次出现“word”后的行文本,并删除打印行的“word”?
我正在使用 OSX。
这是示例文本:
Blalala
'Omfoem From
balanf
word I want this output
word Not this output
Omfoem527
这是我期望的输出:
I want this output
更新:这是我的脚本,它可以满足我的需要:
sed -n 's/^.*word //p' file.txt > temp.txt
sed -n '1p' temp.txt >> newfile.txt
rm temp.txt
第一行打印删除“word”后“word”所在的整行文本,选择文件 temp.txt 中所有出现的“word”。我还添加了 ^.* 以防“word”之前有任何其他文本。
第二行仅将文件 temp.txt 的第一行打印到 newfile.txt 第三行删除 temp.txt 文件。
可能不是最有效的,但它确实有效。
答案1
尝试这个,
sed -n '/word/{n;p;q}' file
- n -> 将下一行输入读取/附加到模式空间中。
- p -> 打印当前模式空间。
- q -> 立即退出 sed 脚本而不处理任何更多输入,仅第一次出现...
答案2
假设您只处理一个文件,和该模式可能会发生仅在相关线路上一次,以下内容将起作用:
awk -F"word" 'NF>1 {print $2; exit}' file
这将使用模式“word”作为字段分隔符,并检查是否有多个这样的“字段”。如果是这样,则打印第二个字段(相当于后面的文本)word
并停止执行。
如果你想处理多个文件,你可以使用
awk -F"word" 'NF>1 {print $2; nextfile}' file1 file2 ...
但这会不太便携(mawk
例如不适用于)。