sed コマンドの作成

sed コマンドの作成

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またはで始まり、オプションでスペースまたはタブが前にある行を探します。その行を見つけたら、行の終わり(存在する場合)から前のスペースを削除し、行の末尾にスペースの合計を追加します。+-\\\\

\\これにより、すでにその文字列がある行の末尾に追加されません。

関連情報