次の単語リストがあります。
name,id,3
次のように二重引用符で囲む必要があります。
"name,id,3"
私が試してみました sed 's/.*/\"&\"/g'
および得た:
"name,id,3
二重引用符が1つしかなく、終了二重引用符がない。
私も試しましたawk {print "\""$1"\""}
はまったく同じ結果になります。私は助けが必要です。
入力ファイルの行末に改行があります。それらを削除するには、ファイルでdos2unix
を使用する必要があります。またはこれを行うことができます:
sed 's/\(.*\)\r/"\1"/g'
キャリッジリターンが削除され、引用符が追加されます。
これを使用して、入力を次の場所にパイプします。
sed 's/^/"/;s/$/"/'
^
は行頭のアンカーであり、$
は行末のアンカーです。 sed
行では、行の開始と終了をそれぞれ"
と"
に置き換えています。
例:
$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"
sed
なし:
$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4
ファイルにDOSの行末があるようです。パイプを使用してdos2unix
firstにパイプしてください。
証明:
$ cat test.txt
name,id,2
name,id,3
name,id,4
$ sed 's/^/"/;s/$/"/' test.txt
"name,id,2
"name,id,3
"name,id,4
$ cat test.txt|dos2unix|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"
次のように、sedの代わりにawkを使用できます。
line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
または、次のようにBASH printfを使用することもできます。
printf '"%s"\n' $line
私が見つけた最も簡単な方法は、二重引用符にHEXコードを使用することです。
echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
"name,id,3"
@Dennisソリューションと同様に、
使用する
sed 's/\(.*\)/"\1"/g'
「\ r」を探す必要はありません。これにより、すべての文字列に二重引用符が適用されます。これには、入力ファイルでdos2unixを実行する必要はありません。