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

时间:2010-12-11 00:46:50

标签: regex linux bash shell scripting

我是bash脚本的新手,但我想做以下事情:

我想在FILE_1中检测到STRING_1“STRING_2”模式,并将STRING_2附加到FILE_2

这是一种简洁的方法吗?

6 个答案:

答案 0 :(得分:1)

你的问题相当模糊;但我猜你想要什么

如果FILE_1中存在STRING_1,请将STRING_2附加到FILE_2

answer=`grep -c STRING_1 FILE_1`
if [ "$answer" -gt 0 ] 
then
     echo "$STRING_2" >> FILE_2
fi

答案 1 :(得分:1)

您可以执行以下操作:

   sed 's/STRING_1 \"(.*)\"/\1/g' FILE_1 >FILE_2

这里发生的事情是,sed正在焚烧FILE_1中第一个和第二个'/'之间的所有内容,并将第二个和第三个'/'之间的内容发送到FILE_2。

()组被分配到\ 1,\ 2等...所以在\ s之间的所有内容都是你的STRING_2。

答案 2 :(得分:1)

grep -Po '(?<=aaa ")([^"]*)(?=")' FILE_1 >> FILE_2

答案 3 :(得分:0)

如果我正确理解了这个问题,那么你有一个包含以下内容的文件:

word1a "word1b"
word2a "word2b"
word3a "word3b"

您可以使用sed提取引号之间包含的值,然后重定向到文件

sed 's/.*"\(.*\)"/\1/' FILE_1 > FILE_2

答案 4 :(得分:0)

你也可以使用它:

grep '^\s*STRING_1\s*\".*\"\s*$' FILE_1 | awk -F \" '{printf $2"\n"}' >> FILE_2

它正确处理输入文件的多个空白字符,并在FILE_2末尾的STRING_2后附加换行符。

答案 5 :(得分:0)

这就是我现在所拥有的:

sed's / STRING_1 \ s *:\ s *“([^”] *)“/ \ 1 / g'”FILE_1“&gt;&gt; FILE_2;

我希望它在文件1中检测以下模式:

STRING_1   :   "STRING_2"

并将STRING_2保存到文件2

但这不起作用,它会向FILE_2添加大量随机内容(不应该匹配)