
テキストファイルの特定の行の末尾に足りない引用符を追加しようとしています。
正規表現[^\"]$がターミナル二重引用符が欠落している行を見つけるのに十分であることがわかったので、逆参照を使用して次の置換を試みました(正直、以前は使用したことがありません)。使用します sed。
sed 's|([^\"]$)|\1\"|g' bigfile.tsv
クリック数
sed: -e expression #1, char 17: invalid reference \1 on `s' command's RHS
代替引用符を避けなければ同じです。
sed 's|([^\"]$)|\1"|g' bigfile.tsv
(今、文字16は積極的です。)逆参照はどのように機能しますか? https://xkcd.com/1171/
答え1
sed
なしで実行する場合、-E
式はデフォルトの正規表現であり、キャプチャグループはで書く必要があります。拡張正規表現を有効にして\(...\)
実行すると、キャプチャグループが作成されます。-E
(...)
内部はリテラルなので、式はで\
終わる[...]
行に二重引用符を追加する必要はありません\
。他の脱出も必要ありません。
したがって、sed
次のようにコマンドを作成できます。
sed 's/\([^"]\)$/\1"/'
または
sed -E 's/([^"])$/\1"/'
または以下を使用してください&
。
sed 's/[^"]$/&"/'
式の置換部分は、&
正規表現に一致する入力部分で置き換えられます。
キャプチャグループを使用しない他の選択肢:
sed '/[^"]$/ s/$/"/'
これはs/$/"/
一致するすべての行に適用されます/[^"]$/
。
または、
sed '/"$/ !s/$/"/'
これはs/$/"/
、一致しないすべての行に対して機能します(空の行にも追加する/"$/
という点で、ここの他の方法とは少し異なります)。"
g
すべての場合において、最後のフラグは次のとおりです。本当に不要。
答え2
努力するsed -e 's|\([^\"]$\)|\1\"|g' bigfile.tsv
。