gpt4 book ai didi

sed - 除了 SED 提取之外,如何打印一些自由文本

转载 作者:行者123 更新时间:2023-12-04 00:38:15 24 4
gpt4 key购买 nike

提取第一行并打印到另一个文件的众所周知的 SED 命令

sed -n '1 p' /p/raw.txt | cat >> /p/001.txt ;

在/p/001.txt 中给出类似的输出

John Doe

但是如何修改上面的命令以添加一些自由文本并具有例如如下的输出

Name: John Doe

感谢您尝试的任何提示。

最佳答案

您可以在一个命令中完成(没有子 shell):

sed 's/^/Name: /;q' /p/raw.txt >> /p/001.txt

这在第一行前面加上前缀“Name:”,打印它,然后退出,这样你就不会处理额外的行。在 q 之前添加行号以打印直到(包括)该行号的所有行。输出附加到 /p/001.txt 就像您的原始代码一样。

如果你想要一系列的行:

sed -n '3,9{s/^/Name: /;p}9q' /p/raw.txt >> /p/001.txt

这从第 3-9 行读取,执行替换,打印,然后在第 9 行后退出。

如果你想要特定的行,我推荐 awk:

awk 'NR==3 || NR==9 { print "Name: " $0 } NR>=9 { exit }' /p/raw.txt >> /p/001.txt

这有两个子句。有人说记录数(行号)是 3 或 9,在这种情况下,我们打印前缀和行。另一个告诉我们在第 9 条记录后停止读取文件。

这里还有两个命令来展示 awk 如何仅作用于第一行或给定范围:

awk '{ print "Name: " $0 } NR >= 1 { exit }' /p/raw.txt >> /p/001.txt
awk '3 <= NR { print "Name: " $0 } NR >= 9 { exit }' /p/raw.txt >> /p/001.txt

看来您是在不断地从一个文件构建另一个文件。考虑:

tail -Fn0 /p/raw.txt |sed 's/^/Name: /' >> /p/001.txt

这将持续运行,仅将新条目(在命令运行后添加)添加到/p/001.txt

也许您有很多重复问题需要解决?

awk 'NR != FNR { $0 = "Name: " $0 } !s[$0]++' \
/p/001.txt /p/raw.txt > /tmp/001.txt && mv /tmp/001.txt /p/001.txt

这会将以前保存的名称与任何新名称折叠在一起,仅打印一次名称(!s[$0]++s[$0] 为零时为真(它的默认状态),但在评估之后,它递增到 1,使它在第二次出现时为 false。当 bare 从句没有 Action 时,打印该行。)因为我们正在读取输出文件,我们需要一个临时输出。成功完成后,我们将其移至目标输出文件之上。

关于sed - 除了 SED 提取之外,如何打印一些自由文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38253113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com