Shell-Script

改變文本文件的模式

  • February 27, 2012

文本文件的內容類似於

chair
table
pen
desk

現在我希望它被更改並儲存在一個變數var中,如下所示

(‘椅子’,‘椅子’),(‘桌子’,‘桌子’),(‘筆’,‘筆’),(‘桌子’,‘桌子’)

可能嗎?

編輯 Jofel 的分析器給出了以下錯誤

$ 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

一種使用方式sed

script.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')

不需要子程序,可以在純 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)

注意&&要執行echowhile只有它文件是非空的。

引用自:https://unix.stackexchange.com/questions/32459