我想要搜索我的搜索词的下一个并写入同一个文件。我知道如何使用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旁边的单词。我想用()。
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)***).
谢谢
答案 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