ファイルの各行の最後の文字が一重引用符文字で終わるかどうかを確認する方法

ファイルの各行の最後の文字が一重引用符文字で終わるかどうかを確認する方法

複数行のファイルがあります。

ファイルの各行に表示される最後の文字が一重引用符であることを確認しながら、ファイルを更新したいと思います'。そうでない場合は、各行の末尾に一重引用符を追加する必要があります。

一重引用符が行の最後の文字である場合は、そのままにしてください。

猫テスト.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'

関連情報