用于注释和取消注释行的 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$/"

我想用 Autumn、Ferari-taxi、Delta M、Red_Park 来评论意大利。我知道如何用 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词中包含您的目标国家/地区,对备选方案进行分组并允许两个搜索词(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

-i通过包含 in place标志来在同一文件中进行更改sed

sed -i -E .....

编辑您可以将此作为另一个问题发布,但是...

“……是否可以在\\不输入\\\\sed 的情况下找到单词 ?……”换句话说,没有逃跑他们。

不。原因是这里:

'\' 字符后跟某些普通字符时,具有特殊含义

因此,在您的匹配字符串中,如果 后面的字符\是形成保留配对之一(例如\+, \?, \n)的字符,如何sed知道您正在查找文字\n还是换行符?

因此,每个\要按字面意思读取的字符都必须进行转义,以sed明确地知道它不是任何保留字符序列的一部分。

相关内容