我有一个大文本文件(myfile.txt),在其中正好一行中,我试图将值“ 0.999999999”替换为另一个数字,例如“ 0.111111111”。
expression "if((CONDITION1==1),0.999999999,CATEGORY1)"
可以通过查找前面和后面的字符串来唯一地标识该行(必须在一起,否则该模式不是唯一的),或者在这种情况下
'expression "if((CONDITION1==1),'
and
',CATEGORY1)"'
研究了其他几篇文章后,我发现我的案子具有挑战性
我看到的第一个问题在其他帖子中已经解决,但是我对第二个问题感到困惑。
我尝试了几种不同的方法,但是没有一种方法能产生正确的结果,我得到的最接近的方法是:
sed -n '/if((CONDITION1==1).CATEGORY1)/{ s/\,*\,/\,0.111111111\,/p }' myfile.txt
我试图通过查找部分前缀和后缀字符串来标识字符串,然后尝试替换两个逗号之间的所有内容,包括两个逗号。
我的问题是:
===============编辑=============
我已经基于@Ed的版本更新了我的代码,以便在基于输入运行代码时能够从该文件中提取的变量中读取值。希望以后能对某人有所帮助:
#test.sh
month= $1
VAL= $(cat data_$month.dat | awk 'NR==2')
echo "VAL is:" $VAL
sed -i 's/\(expression "if((CONDITION1==1),\)[^,]*\(,CATEGORY1)"\)/\1'"${VAL}"'\2/' file
答案 0 :(得分:1)
$ sed 's/\(expression "if((CONDITION1==1),\)[^,]*\(,CATEGORY1)"\)/\10.111111111\2/' file
expression "if((CONDITION1==1),0.111111111,CATEGORY1)"
下面是一个示例,说明为什么未捕获的部分应该是[^,]*
而不是.*
:
$ cat file
expression "if((CONDITION1==1),0.999999999,CATEGORY1)" # this is ",CATEGORY1)"
expression "if((CONDITION1==1),0.999999999,FOO)" # this is not ",CATEGORY1)"
$ sed 's/\(expression "if((CONDITION1==1),\)[^,]*\(,CATEGORY1)"\)/\10.111111111\2/' file
expression "if((CONDITION1==1),0.111111111,CATEGORY1)" # this is ",CATEGORY1)"
expression "if((CONDITION1==1),0.999999999,FOO)" # this is not ",CATEGORY1)"
$ sed 's/\(expression "if((CONDITION1==1),\).*\(,CATEGORY1)"\)/\10.111111111\2/' file
expression "if((CONDITION1==1),0.111111111,CATEGORY1)"
expression "if((CONDITION1==1),0.111111111,CATEGORY1)"
答案 1 :(得分:0)
如果您的数据位于“ d”文件中,请尝试使用gnu sed:
.fa-facebook {
color: black; /* or any other color */
}