Regex 在bash脚本中使用正则表达式

Regex 在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

我不熟悉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 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
管道。。