複数行のファイルがあります。
ファイルの各行に表示される最後の文字が一重引用符であることを確認しながら、ファイルを更新したいと思います'
。そうでない場合は、各行の末尾に一重引用符を追加する必要があります。
一重引用符が行の最後の文字である場合は、そのままにしてください。
猫テスト.txt
fahsjhjkhkjhjhajkhjf
afasfsfsfffsfasf'
aaffa' sfff
wfafsfsaffs'
fsafsfs'afffafsasf
予想出力:
fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'
答え1
このsed
式は、s/[^']$/&'/
一重引用符ではなく文字で終わる行の末尾に一重引用符を挿入します。
シェルから:
sed "s/[^']$/&'/" file
式には一重引用符が含まれているので、二重引用符で式を作成することにしました。内部編集を実行するには、この非標準オプションを実装する場合は、sed
そのオプションを使用してください。-i
空行に一重引用符を挿入するには、空行に特別に追加の式を使用するか、次のようにします。いつも行の末尾に一重引用符を挿入し、結果の二重引用符を置き換えます。
つまり、
sed -e "s/[^']$/&'/" -e "/^$/s//'/" file
または
sed -e "s/$/'/" -e "s/''$/'/" file
答え2
一致する単一引用符があり、存在する場合はそれを置き換えることが許可されている場合は、次のことを試すことができますsed
。
$ sed "s/\([^']*\)'\?$/\1'/" input_file
'fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'
これは逆参照を使用して行末までのすべての文字をキャプチャします。行の末尾に一重引用符がある場合は、キャプチャ角かっこの外側に一重引用符を配置して除外/削除します。
角かっこ内に取り込まれたすべての項目は、\1
各行の最後にハードコードされた一重引用符で返されます。
答え3
次の操作が実行されます。
awk -v a=\' '{print $0 a}' input.file
最後に二重引用符を使用したくない場合は、以下を試してください。
awk -v a=\' '{print $0 a}' input.file|sed "s/''$/'/"
答え4
'
空の入力行が出力に表示され、入力は次のような出力foo''
が必要であると仮定しますfoo'
。
$ sed "s/'*$/'/" file
fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'