私は次の単語のリストを持っています:
name,id,3
私はそれをこのように二重引用符で囲む必要があります:
"name,id,3"
私は試しsed 's/.*/\"&\"/g'
ました:
"name,id,3
二重引用符が1つだけあり、最後の二重引用符がありません。
私もawk {print "\""$1"\""}
まったく同じ結果で試しました。私は助けが必要です。
私は次の単語のリストを持っています:
name,id,3
私はそれをこのように二重引用符で囲む必要があります:
"name,id,3"
私は試しsed 's/.*/\"&\"/g'
ました:
"name,id,3
二重引用符が1つだけあり、最後の二重引用符がありません。
私もawk {print "\""$1"\""}
まったく同じ結果で試しました。私は助けが必要です。
これを使用して、入力を次の場所にパイプします。
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
最初にパイプで通します。
証拠:
$ 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"
入力ファイルの行末にはキャリッジリターンがあります。dos2unix
それらを削除するには、ファイルで使用する必要があります。または、これを行うことができます:
sed 's/\(.*\)\r/"\1"/g'
これにより、キャリッジリターンが削除され、引用符が追加されます。
次のように、sedの代わりにawkを使用できます。
line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'
または、次のようにBASHprintfを使用することをお勧めします。
printf '"%s"\n' $line
私が見つけた最も簡単な方法は、二重引用符にHEXコードを使用することです。
echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
"name,id,3"
@Dennisソリューションと同様に、
使用する
sed 's/\(.*\)/"\1"/g'
'\ r'を探す必要はありません。これにより、すべての文字列に二重引用符が適用されます。これには、入力ファイルでdos2unixを実行する必要はありません。
sedコマンドを使用する前に、エスケープ文字として\を使用すると、文字列に「」が出力されます。例として、以下のコマンドを使用して、テキストファイルの最初の行に同様の文字列を配置します。
var = "\"name,id,3\""
sed -i '1i' "$var" /tmp/out.txt
これは私のために働きます:
echo name,id,3 | sed 's/name,id,3/"name,id,3"/'
"name,id,3"