我想替换文件的第二行,我知道$ use用于最后一行,但不知道怎么说最后一行。
parallel (
{
ignore(FAILURE) {
build( "Build2Test", BUILDFILE: "", WARFILE: "http://maven.example.com/130602.0.war", STUDY: "UK", BUG: "33323" )
}},
)
我希望将}},
替换为}}
,我希望删除,
逗号,但此文件有许多其他代码,因此我无法使用模式匹配,我需要使用第二个从文件末尾开始。
答案 0 :(得分:7)
如果您知道如何更改第N行,只需先将文件翻转,例如它没有其他sed解决方案那么专业,但有效......:)
tail -r <file | sed '2s/}},/}}/' | tail -r >newfile
e.g。从下一个输入
}},
}},
}},
}},
}},
上面的内容
}},
}},
}},
}}
}},
tail -r
是Linux的tac
命令的BSD等价物。在Linux上,在OS X或Freebsd上使用tac
使用tail -r
。 Bot做同样的事情:按行的顺序打印文件(最后一行打印为第一行)。
答案 1 :(得分:7)
反转文件,在第二行上工作,然后重新反转文件:
tac file | sed '2 s/,$//' | tac
将结果保存回“file”,将其添加到命令
> file.new && mv file file.bak && mv file.new file
或者,使用ed
脚本
ed file <<END
$-1 s/,$//
w
q
END
答案 2 :(得分:6)
以下内容应该有效(请注意,在某些系统上,您可能需要删除所有注释):
sed '1 { # if this is the first line
h # copy to hold space
d # delete pattern space and return to start
}
/^}},$/ { # if this line matches regex /^}},$/
x # exchange pattern and hold space
b # print pattern space and return to start
}
H # append line to hold space
$ { # if this is the last line
x # exchange pattern and hold space
s/^}},/}}/ # replace "}}," at start of pattern space with "}}"
b # print pattern space and return to start
}
d # delete pattern space and return to start'
或紧凑版:
sed '1{h;d};/^}},$/{x;b};H;${x;s/^}},/}}/;b};d'
示例:
$ echo 'parallel (
{
ignore(FAILURE) {
build( "Build2Test", BUILDFILE: "", WARFILE: "http://maven.example.com/130602.0.war", STUDY: "UK", BUG: "33323" )
}},
)' | sed '1{h;d};/^}},$/{x;b};H;${x;s/^}},/}}/;b};d'
parallel (
{
ignore(FAILURE) {
build( "Build2Test", BUILDFILE: "", WARFILE: "http://maven.example.com/130602.0.war", STUDY: "UK", BUG: "33323" )
}}
)
答案 3 :(得分:3)
这可能适合你(GNU sed):
sed '$!N;$s/}},/}}/;P;D' file
在模式空间中保留两行,并在文件末尾替换所需的模式。