我有一个文本文件如下
PARAMETER=VALUE
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
我希望使用sed搜索完全匹配的PARAMETER
,并用新文本替换整行。但是如果PARAMETER
和[START]
之间的[END]
sed
您是否能够帮助构建awk
或a = tf.random_uniform(shape = [5,3,3])
b = tf.ones(shape = [5,3,1])
c = tf.matmul(a,b)
命令
答案 0 :(得分:1)
使用f
滞后的awk:
$ awk '
/^PARAMETER/ && f!=1 { $0="THE REPLACEMENT" } # replace when flag not raised
/\[START\]/ { f=1 } # raise flag at marker
/\[END\]/ { f=0 } # flip flag at the other
1' file # output
THE REPLACEMENT
THE REPLACEMENT
[START]
PARAMETER=VALUE
[END]
修改添加了单行_
$ awk '/^PARAMETER/&&f!=1{$0="THE REPLACEMENT"}/\[START\]/{f=1}/\[END\]/{f=0}1' file
答案 1 :(得分:0)
@Prashant:试试:虽然詹姆斯的代码和我的代码之间差别不大。唯一的问题是,我想用你的话来完全匹配字符串" PARAMETER"不匹配字符串" PARAMETER1"。
awk -F"=" '/\[END\]/{A=""} /\[START\]/{A=1} !A && $1 == "PARAMETER"{print "NEW_VALUES";next} 1' Input_file
这里我将字段分隔符设为" ="然后在一行中查找字符串START,如果是,则将变量A的值设为1.在一行中查找字符串END并将变量A的值设为NULL。因此,如果变量A的值为NULL且$ 1为PARAMETER,则检查条件,然后打印新值并给出下一个跳过进一步的语句。设置1将打印所有行(当然不会更改新值,因为当新值打印时,程序不会达到1,因此不会在那里打印)。
答案 2 :(得分:0)
使用sed:
sed '/^\[START\]/,/^\[END\]/!s/^PARAMETER=.*/replacement/'
说明:
/^\[START\]/,/^\[END\]/
:匹配以[START]
开头并以[END]
!
:否定地址,即匹配部分之外的所有行s/^PARAMETER=.*/replacement/
:替换以PARAMETER=
示例:
$ cat input.txt
PARAMETER=VALUE
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
$ sed '/^\[START\]/,/^\[END\]/!s/^PARAMETER=.*/replacement/' input.txt
replacement
PARAMETER1=VALUE
[START]
PARAMETER=VALUE
[END]
$