たとえば、各行の単語リストを含むファイルを取得したいとします。
act
bat
cat
dog
eel
そして一行にリストし、カンマで区切って引用してください。結果は次のとおりです。
'act', 'bat', 'cat', 'dog', 'eel',
したがって、一重引用符、単語、別の一重引用符、カンマ、スペースの順です。次に、新しい名前の新しいファイルに出力します。
答え1
短いprintf
方法:
printf "'%s', " $(< file) > output
答え2
使用sed
とtr
:
$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n'
'act', 'bat', 'cat', 'dog', 'eel',
(出力の末尾に改行文字はありません)
input の各行の先頭と末尾にsed
引用符(および後続のコンマとスペース)を挿入し、改行をtr
削除します。
出力をファイルにリダイレクトする:
$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n' >newfile
答え3
使用awk
:
awk '{printf ("'\'%s\'', ", $0)}' infile > new_file
'act', 'bat', 'cat', 'dog', 'eel',
または、最後に余分なカンマを避けるには、代わりに次のようにします。
awk '{printf S"'\''"$0"'\''";S=", "}'
'act', 'bat', 'cat', 'dog', 'eel'
paste
または引用符なしで直接使用してください。
paste -d, -s infile
act,bat,cat,dog,eel
その後、ヘルプを参照してくださいsed
。
sed -r "s/(\w+)/'\1'/g" <(paste -d, -s infile)
'act','bat','cat','dog','eel'
答え4
パール方法:
$ perl -lne '$sq="\x27";push @a,$sq.$_.$sq;END{ print join( ",",@a) }' input.txt
'act','bat','cat','dog','eel'
- ここでは、16進値を変数に格納された一重引用符として使用
sq
し、ファイルから読み取られた各行に対して一重引用符で囲みます。 a
一重引用符付きの各行は配列にプッシュされます。- すべての内容を読み取った後、Joinは各配列項目に次のように関連付けられたテキスト文字列を生成します。
,
Pythonメソッドは同じアイデアに従います。
$ python -c 'import sys;sq="\x27";print ",".join([ sq + l.strip() + sq for l in sys.stdin ])' < input.txt
'act','bat','cat','dog','eel'
stdin
ここでは、<
シェル演算子を介して入力ファイルをコマンドストリームにリダイレクトします。\n
各行は、Perlメソッドで説明したのと同じアイデアで参照されるストリップメソッドを介して改行文字から削除されます。[item for item in iterable]
すべての行は構造(リスト理解と呼ばれる)を介してリストとして扱われます。- 最後に、
",".join()
すべてのリスト項目から素晴らしい文字列を作成しましょう。