我想将包含的行复制www.website.com
到包含 的行中thetext
。
例如,我想转换这个输入:
Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetext
Sed ullamcorper tellus
进入这个输出:
Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetextCras eu www.website.com velit vitae
Sed ullamcorper tellus
我不知道如何使用复制粘贴sed
。看起来有些棘手。
答案1
您还可以使用ed
(此处在Bash
shell 中使用)来移动和连接线,如下所示:
str='
Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetext
Sed ullamcorper tellus
'
# cf. http://wiki.bash-hackers.org/howto/edit-ed
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str")
H
/www\.website\.com/m/thetext/
-1,.j
,p
q
EOF
如果您要就地编辑文件,这ed
可能是您的首选工具。
答案2
我不确定这是否正是您想要的,但是:
- 当您看到感兴趣的行(包含 的行
www.website.com
)时,将其复制到保留空间中。 - 当您看到要替换的文本 (
thetext
) 时,追加保留空间的内容,然后 - 清理结果。
sed -e '/www\.website\.com/h' \
-e '/thetext/{' -e 'G' -e 's/\n//' -e '}'
我确实建议转向 awk 来处理普通 之外的任何事情s///
。
awk '
/www\.website\.com/ { line=$0 }
/thetext/ { $0 = $0 line }
1'