行コメントとコメント解除のためのBashスクリプト

行コメントとコメント解除のためのBashスクリプト

この期間中はお元気にしてください。問題は、私のtxtファイルのいくつかの行にコメントを付けたいのです。複数行にコメントを付けてコメントを解除するコードがありますが、会社名を取得する方法がわかりません。私のテキストファイルには次のスキームがあります。lunar_static KKK_<countryname>_NUM 08.00.name

lunar_static KKK_USA_NUM 08.00.Winter
lunar_static KKK_ITALY_NUM 08.Winter
lunar_static KKK_ITALY_NUM 08.00.Spring
lunar_static KKK_ITALY_NUM 08.00.Autumn
lunar_static KKK_SPAIN_NUM 08.00.Winter
lunar_static KKK_SPAIN_NUM 08.00.Spring
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

秋、フェラーリタクシー、デルタM、レッドパークでイタリアへのコメントをお願いします。私はsedを使っていくつかの名前にコメントを付ける方法を知っています。

sed -i '/Winter\|Spring/s/^/#/' file2.txt

そしてコメントを解除

sed -i '/Spring/s/^#//' file2.txt

ただし、国名に関係なくすべての名前を選択します。その国に行く方法がわからない。期待される出力

    lunar_static KKK_USA_NUM 08.00.Winter
    lunar_static KKK_ITALY_NUM 08.Winter
    lunar_static KKK_ITALY_NUM 08.00.Spring
    #lunar_static KKK_ITALY_NUM 08.00.Autumn
    lunar_static KKK_SPAIN_NUM 08.00.Winter
    lunar_static KKK_SPAIN_NUM 08.00.Spring
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    #lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
    lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

私は私が受け取ったすべての提案に感謝します。ありがとうございます!

答え1

ITALYクエリにターゲット国を含め、代替をグループ化し、2つのクエリ(Autumn|Delta....)の間に文字を許可する必要があります。.*

sed -E '/ITALY.*(Autumn|Delta.. M|Red.._Park|Ferari-taxi)/s/^/#/' file1

\脱出を避けるためのちょっとしたチートです。

sed -E '/ITALY.*(Autumn|Delta\\\\ M|Red\\\\_Park|Ferari-taxi)/s/^/#/' file1

-iin place フラグを含む同じファイルを変更します。sed

sed -i -E .....

編集するこれを別の質問で投稿することもできますが...

\\「...sedを入力せずに単語を見つけることができますか\\\\?...」つまり、いいえ逃げるそれらを。

いいえ。なぜならここ:

'\'文字の後にいくつかの一般的な文字が続くときは特別な意味を持ちます。

したがって、一致文字列で、次の文字が\予約されたペア(たとえば\+、、、\?)のいずれかを構成する\n文字である場合、リテラルまたは改行文字を探してsedいるかどうかはどうすればわかりますか?\n

したがって、\文字通り読み取る必要があるすべての文字は、sed予約された文字シーケンスの一部ではないことを明確にするためにエスケープする必要があります。

関連情報