Regex 在每对双引号之间插入字符串
我陷入困境,我有如下所示的字符串:Regex 在每对双引号之间插入字符串,regex,bash,sed,Regex,Bash,Sed,我陷入困境,我有如下所示的字符串: -name "B_12*" -o -name "B_21*" -o -name "B_31" -o -name "B_41" -name "B_12*.tar" -o -name "B_21*.tar" -o -name "B_31.tar" -o -name "B_41.tar" 我的要求是我想转换上面的字符串,如下所示: -name "B_12*" -o -name "B_21*" -o -name "B_31" -o -name "B_41" -n
-name "B_12*" -o -name "B_21*" -o -name "B_31" -o -name "B_41"
-name "B_12*.tar" -o -name "B_21*.tar" -o -name "B_31.tar" -o -name "B_41.tar"
我的要求是我想转换上面的字符串,如下所示:
-name "B_12*" -o -name "B_21*" -o -name "B_31" -o -name "B_41"
-name "B_12*.tar" -o -name "B_21*.tar" -o -name "B_31.tar" -o -name "B_41.tar"
我不擅长bash命令,但我不知道这个问题可以用
sed
命令来解决。此模式将匹配文本字符串而不使用单引号,您只需获得所有匹配项并执行另一个查询来添加.tar
\b[A-Z][^"]+
匹配作用域[A-Z]中的字符\b[A-Z]
匹配到“ 演示[^”]
- 这里唯一棘手的部分是,您需要匹配两个引号,以便它们不会再次匹配。对于具有ERE支持by-E选项的sed发行版,下面的命令就足够了
sed -E 's/("[^"]*)"/\1.tar"/g' file
您好,查询似乎总是在sed中完成的。很方便!我一直认为我必须进行查询(比如循环)。谢谢正则表达式末尾的
g
af告诉sed循环所有必须更改的事件。@Pierre正确。除了它不是正则表达式的一部分,而是sed脚本的标志部分;术语的误用常常导致错误confusion@oguzismail:当然,我的意思是在正则表达式之后,比在正则表达式末尾更好。您应该添加更多关于确切需要替换的内容的详细信息。它总是-命名为“B_XX*”
还是其他什么?告诉我们您尝试了什么以及它遇到了什么问题。看起来您试图将参数列表(对于查找命令?)构造为字符串。这样做几乎总是错误的。通常的正确方法是使用数组而不是普通字符串(请参阅)。为了获得与regex101.com相同的结果,我认为您需要在sed命令中添加-E
标志。即使使用-E,一些sed也无法识别\b
您好,谢谢您的回答。。如果我只想搜索扩展名前有编号的文件,比如:B_12.csv、B_22.csv和B_22-UK.csv我想要正则表达式,它应该得到B_12.cvs和B_22.csv,并且应该包含B_22-UK.csv