改变文本文件的模式

改变文本文件的模式

文本文件的内容类似于

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 ",")

相关内容