这是我在学习sed过程中的第3篇文章。我有一个假设的要求。我希望能够用'was'替换每行中的第三个单词,其中单词由空格分隔。
bash$ cat words
hi this is me here
hi this is me again
hi this is me yet again
hi this is me
期望的输出:
hi this was me here
hi this was me again
hi this was me yet again
hi this was me
人们可以请帮助解决如何使用sed。我尝试了一些执行指令,但没有奏效。 谢谢,
Jagrati
我找到了!我找到了它!
好的,我终于得到了正确的指示。这有效:
sed -e 's/[^ ]*[^ ]/was/3' words
答案 0 :(得分:7)
如果您不关心格式化,这是一种更简单的方法
$ awk '{$3="was"}1' file
hi this was me here
hi this was me again
hi this was me yet again
hi this was me
答案 1 :(得分:5)
我总是这样做:使用 groups 匹配第一个和第二个单词,然后使用反向引用将它们替换为自己。
sed 's/^\([^ ]*\) \([^ ]*\) is/\1 \2 was/'
答案 2 :(得分:1)
这会查看单词边界而不仅仅是空格,因此当有标点符号时它也能正常工作。它需要GNU sed
:
$ cat words
hi this is me here
hi this is me again
hi this is me yet again
hi this is me
hi this "is, me
$ sed 's/\w\+\(\W\)/was\1/3' words
hi this was me here
hi this was me again
hi this was me yet again
hi this was me
hi this "was, me
答案 3 :(得分:0)
在任何类型的sed中:
sed 's/^\([[:blank:]]*[^[:blank:]]\{1,\}[[:blank:]]\{1,\}[^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)[^[:blank:]]\{1,\}\(.*\)$/\1was\2/' words