输入文件看起来像这样
H1 O1 C1 H2 H3 C2 H4 H5 O2 C3 H6 H7 C4 H8 H9 O3 C5 H10 H11 C6 H12 ......
我想要以下输出文件
z(A) H1 O1 C1 H2 H3 C2 H4 H5 O2 C3 H6 H7 C4 H8 H9 O3 C5 H10 H11 C6 H12 ...... OW HW1 HW2
以便在行首包含“z(A)”,在行末包含“OW HW1 HW2”
答案1
sed -e '1s/^/z(A) /' -e '1s/$/ OW HW1 HW2/' < input > output
1
是第一行,s
是替代行,^
是行首,$
是行尾。
答案2
awk 'NR==1{print "z(A) " $0 " OW HW1 HW2"; next}1'
或者
awk 'NR==1{printf "z(A) %s OW HW1 HW2\n", $0; next}1'
或者
awk 'NR==1{$0="z(A) " $0 " OW HW1 HW2"}1'
答案3
如果您想保留相同的文件,您可以尝试:
printf '%s' 'Z(A) ' "$(<infile)" 'OW HW1 HW2' >infile
答案4
您还可以使用可编写脚本的编辑器ed
!
printf '%s\n' '1s/^/z(A) /' '1s/$/ OW HW1 HW2/' 'wq' | ed -s filename
这将向 打印以下三个换行符分隔的命令ed
,我们要求其默默地编辑给定的filename
:
1s/^/z(A) /
- 如sed
答案中所示,在第 1 行,将行的开头替换为文本z(A)
。1s/$/ OW HW1 HW2/
- 如sed
答案中所示,在第 1 行,将行尾替换为文本OW HW1 HW2
。wq
-- 将更改的文件写回磁盘并退出