如何使用shell脚本在(...)中grep这个单词?

时间:2013-12-05 12:03:14

标签: shell awk grep

我想要搜索我的搜索词的下一个并写入同一个文件。我知道如何使用Shell脚本搜索并添加新单词写入同一文件。但我不知道如何grep这个词

#!/bin/bash

LOGFILE =$1

if[-f $LOGFILE ];
then
sed -i 's/Apple /& Samsung /g' myfile.txt
else 
echo "$LOGFILE not found "
fi

但我想知道如何grep下一个单词并在print语句中再次写。

实施例
在这里,我想要grep sqrt word旁边的单词。我想用()。

grep包含in
collisionf2.F90:  temp_cons = 4D0*sml_pi/(lambda***sqrt(lambda)**) collisionf2.F90:  temp_cons = 15*sml_pi/(lambda***sqrt(eds)**) collisionf2.F90:  temp_cons = 4D444444440*sml_pi/(lambda***sqrt(2*4 wq)**).

预期

collisionf2.F90:  temp_cons = 4D0*sml_pi/(lambda***sqrt(lambda) *print(lambda)***) collisionf2.F90:  temp_cons = 15*sml_pi/(lambda***sqrt(eds) *print(eds)***) collisionf2.F90:  temp_cons = 4D444444440*sml_pi/(lambda***sqrt(2*4 wq) *print(2*4 wq)***).

谢谢

2 个答案:

答案 0 :(得分:1)

这可以是一种方式:

sed -i.bak 's/sqrt(\(\w*\))/sqrt(\1) print(\1)/g' file

将文件更新为:

collisionf2.F90: temp_cons = 4D0*sml_pi/(lambda*sqrt(lambda) print(lambda)) collisionf2.F90: temp_cons = 15*sml_pi/(lambda*sqrt(eds) print(eds)) collisionf2.F90: temp_cons = 4D444444440*sml_pi/(lambda*sqrt(2*4 wq)).
  • sed 's/something/new/g'是用“new”替换所有“东西”的基本命令。
  • sed -i执行-inplace-编辑。这样原始文件将替换为新输出。将sed -i.bak原始文件保存为file.bak
  • sqrt(\(\w*\))匹配sqrt(加一些加)
  • sqrt(\1) print(\1)打印回来sqrt(加上“某事”加上)加上print("something")

使用更基本的输入文件:

$ cat a
lambda(sqrt(hello)) blabla
$ sed 's/sqrt(\(\w*\))/sqrt(\1) print(\1)/g' a
lambda(sqrt(hello) print(hello)) blabla

所有在一起:

#!/bin/bash 

LOGFILE=$1 

if [ -f $LOGFILE ]
then 
        sed -i.bak 's/sqrt(\(\w*\))/sqrt(\1) print(\1)/g' $LOGFILE
else 
        echo "$LOGFILE not found " 
fi

答案 1 :(得分:0)

perl -lne 'print $1 if(/\((.*?)\)/)' your_file

测试如下:

> echo "abc(def)"|perl -lne 'print $1 if(/\((.*?)\)/)'
def