sed
空白以外の最初の文字がaまたは+
aのすべての行は、空白と-
aで終わるように正規表現を作成する必要があります\\
。たとえば、行は次のようになります。
-u, -\hspace{.01cm}-unset name
次のようにする必要があります。
-u, -\hspace{.01cm}-unset name \\
私はこれを試みます:
/^[ ]- s/$/ \\\\/g
しかし、うまくいきません。どうすればいいですか?
答え1
次のテストファイルを検討してください。
$ cat testfile
-u, -\hspace{.01cm}-unset name
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name
次のsed
コマンドを検討してください。
$ sed '/^[[:blank:]]*[-+]/ s/$/ \\\\/' testfile
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \\
/^[[:blank:]]*[-+]/
-
空でないか、タブ文字を含む最初の行を選択します+
。これらの行の場合、代替コマンドが行の末尾に\\
追加されます。
または、1つの出力のみを希望する場合\
:
$ sed '/^[[:blank:]]*[-+]/ s/$/ \\/' testfile
-u, -\hspace{.01cm}-unset name \
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \
これは[:blank:]
、スペースとタブに一致するUnicode安全文字クラスです。
答え2
$ cat file
-u, -\hspace{.01cm}-unset name
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \\
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name \\
+u, -\hspace{.01cm}-unset name
$ sed -E '/^[[:blank:]]*[+-]/s/( \\\\)?$/ \\\\/' file
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \\
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name \\
+u, -\hspace{.01cm}-unset name \\
上記のコマンドは、sed
またはで始まり、オプションでスペースまたはタブが前にある行を探します。その行を見つけたら、行の終わり(存在する場合)から前のスペースを削除し、行の末尾にスペースの合計を追加します。+
-
\\
\\
\\
これにより、すでにその文字列がある行の末尾に追加されません。