文本文件的内容类似于
chair
table
pen
desk
现在我希望将其更改并存储在变量中,var
如下所示
('椅子','椅子'),('桌子','桌子'),('笔','笔'),('桌子','桌子')
是否可以?
编辑 Jofel 的 anser 给出了以下错误
$ sed ':a;N;$!ba;s/\n/,/g;s/\w*/(''&'',''&'')/g' -i csclm.txt
sed: The label :a;N;$!ba;s/\n/,/g;s/\w*/(&,&)/g is greater than eight characters.
我在用 :
$ uname -a
HP-UX rcihp145 B.11.23 U 9000/800 3683851961 unlimited-user license
答案1
一种使用方法sed
:
内容脚本.sed:
## Change line.
s/.*/('&','&')/
## Append it to hold space.
H
## In end of file substitute newlines with commas and print.
$ {
g
s/^\n//
s/\n/,/g
p
}
命令:
sed -nf script.sed infile
输出:
('chair','chair'),('table','table'),('pen','pen'),('desk','desk')
答案2
不需要子进程,可以在纯 bash shell 中完成:
var=$(while read line; do echo -n ",('$line','$line')"; done < file)
var=${var:1}
更新:
如果你想把它作为一句台词,你可以:
var=$({ read line && echo -n "('$line','$line')" && while read line; do echo -n ",('$line','$line')"; done } < file)
请注意&&
要执行的操作echo
,并且while
只有当文件非空时。
答案3
这是一个纯 shell 方法:读取每一行,并将正确处理的数据附加到var
.去掉多余的逗号。
var=
while IFS= read -r line; do
var="$var,('$line','$line')"
done <input_file
var=${var#,}
这是使用外部实用程序的简单方法:使用 修改每一行sed
,然后将换行符转换为逗号。去掉多余的逗号。
var=$(<input_file sed "s/.*/('\1','\1')/" | tr "\n" ',')
var=${var%,}
答案4
这是一种非常复杂的方法,仅在 bash shell 中工作(因为进程替换),但仅使用简单的命令:
var=$(sed -e "s/^/'/" -e "s/\$/'/" file |
paste -d "," - <(sed -e "s/^/'/" -e "s/\$/'/" file) |
sed -e "s/^/(/" -e "s/\$/)/" |
paste -s -d ",")