Regex 在bash脚本中使用正则表达式
我不熟悉bash脚本,但我想做以下工作: 我想检测文件_1中的模式字符串_1“STRING_2”,并将字符串_2附加到文件_2Regex 在bash脚本中使用正则表达式,regex,linux,bash,shell,scripting,Regex,Linux,Bash,Shell,Scripting,我不熟悉bash脚本,但我想做以下工作: 我想检测文件_1中的模式字符串_1“STRING_2”,并将字符串_2附加到文件_2 answer=`grep -c STRING_1 FILE_1` if [ "$answer" -gt 0 ] then echo "$STRING_2" >> FILE_2 fi 做这件事的简明方法是什么?你的问题相当模糊;但我猜你想要什么 如果文件_1中存在字符串_1,请将字符串_2附加到文件_2 answer=`grep -c STRIN
answer=`grep -c STRING_1 FILE_1`
if [ "$answer" -gt 0 ]
then
echo "$STRING_2" >> FILE_2
fi
做这件事的简明方法是什么?你的问题相当模糊;但我猜你想要什么 如果文件_1中存在字符串_1,请将字符串_2附加到文件_2
answer=`grep -c STRING_1 FILE_1`
if [ "$answer" -gt 0 ]
then
echo "$STRING_2" >> FILE_2
fi
你的问题相当含糊;但我猜你想要什么 如果文件_1中存在字符串_1,请将字符串_2附加到文件_2
answer=`grep -c STRING_1 FILE_1`
if [ "$answer" -gt 0 ]
then
echo "$STRING_2" >> FILE_2
fi
你可以这样做:
sed 's/STRING_1 \"(.*)\"/\1/g' FILE_1 >FILE_2
这里发生的事情是,sed正在烧灼文件1中第一个和第二个“/”之间的所有内容,并将第二个和第三个“/”之间的内容发送到文件2
()组被分配给\1、\2等。。。因此,在\“s”之间的所有内容都是字符串。\u 2。您可以执行以下操作:
sed 's/STRING_1 \"(.*)\"/\1/g' FILE_1 >FILE_2
这里发生的事情是,sed正在烧灼文件1中第一个和第二个“/”之间的所有内容,并将第二个和第三个“/”之间的内容发送到文件2
()组被分配给\1、\2等…因此\“s”之间的所有内容都是您的字符串\u 2。如果我理解正确,那么您有一个包含以下内容的文件:
word1a "word1b"
word2a "word2b"
word3a "word3b"
可以使用sed提取引号之间包含的值,然后重定向到文件
sed 's/.*"\(.*\)"/\1/' FILE_1 > FILE_2
如果我正确理解了问题,那么您有一个包含以下内容的文件:
word1a "word1b"
word2a "word2b"
word3a "word3b"
可以使用sed提取引号之间包含的值,然后重定向到文件
sed 's/.*"\(.*\)"/\1/' FILE_1 > FILE_2
您还可以使用以下选项:
grep '^\s*STRING_1\s*\".*\"\s*$' FILE_1 | awk -F \" '{printf $2"\n"}' >> FILE_2
它正确地处理输入文件的多个空白字符,并在文件\u 2末尾的字符串\u 2后面追加一个换行符。您也可以使用以下方法:
grep '^\s*STRING_1\s*\".*\"\s*$' FILE_1 | awk -F \" '{printf $2"\n"}' >> FILE_2
grep -Po '(?<=aaa ")([^"]*)(?=")' FILE_1 >> FILE_2
它正确地处理输入文件的多个空白字符,并在文件\u 2末尾的字符串\u 2后面追加一个换行符。
grep-Po'(?grep-Po'(?这是我现在拥有的:
grep -Po '(?<=aaa ")([^"]*)(?=")' FILE_1 >> FILE_2
sed's/STRING_1\s*:\s*“([^”]*)”/\1/g'“FILE_1”>>FILE_2
我希望它检测文件1中的以下模式:
STRING_1 : "STRING_2"
并将字符串_2保存到文件2中
但这不起作用,它在文件2中添加了很多随机内容(不应该匹配)这就是我现在拥有的:
sed's/STRING_1\s*:\s*“([^”]*)”/\1/g'“FILE_1”>>FILE_2
我希望它检测文件1中的以下模式:
STRING_1 : "STRING_2"
并将字符串_2保存到文件2中
但这不起作用,它在文件2(不应该匹配)中添加了大量随机内容或,grep-cstring\u1文件&&echo“$STRING\u2”>>文件
:)但是我不确定他是什么意思,尽管问题很模糊。如果不知道STRING\u 2
,你就不能用它。一个替代redShadow建议的方法,但仍然使用if
是:如果grep-sq STRING\u 1 FILE\u 1;那么。不需要变量、括号或比较。或者,grep-c STRING\u 1 FILE\u 1&&echo“$STRING_2”>>FILE_2
:)但我不确定这是什么意思,尽管这个问题非常模糊。如果不知道STRING_2
,你就不能用它。redShadow建议的替代方案,但仍然使用if
将是:if grep-sq STRING\u 1 FILE\u 1;然后
。无需变量、括号或比较。您需要使用>
进行追加。不必对双引号进行转义,但可以对括号进行转义(除非使用-r
选项将sed
。最好将模式从*
更改为[^]*
因为sed
正则表达式是贪婪的。您需要使用>
来追加。不必转义双引号,而是转义括号(除非您使用-r
选项来sed
。可能最好将模式从*
更改为[^]*
因为sed
正则表达式是贪婪的。很好..我没有考虑将否定断言与-o
一起使用,但它似乎有效,并且是避免使用grep | sed
管道的好方法..很好..我没有考虑将否定断言与-o
一起使用,但它似乎有效,而且是一个好方法o避免使用grep | sed
管道。。