我有一个文件BookDB.txt,它以下列格式存储数据:
Java for dummies:Pauline:10.56:4:3
Bash for dummies:David:10.45:4:5
PHP for dummies:Frederich:10.67:4:4
Perl for dummies:Pearlyn:10.56:4:5
C++ for dummies:Jared:10.46:4:5
如果我想说,用“傻瓜的任何东西”替换第四行的第一个字段,这样文件看起来就像下面一样,我该怎么做?
Java for dummies:Pauline:10.56:4:3
Bash for dummies:David:10.45:4:5
PHP for dummies:Frederich:10.67:4:4
anything for dummies:Pearlyn:10.56:4:5
C++ for dummies:Jared:10.46:4:5
我在这个问题上尝试过其他人提供的片段,但是第一个字段中的空白给了我一些问题:
sed replace in-line a specific column number value at a specific line number
答案 0 :(得分:3)
使用awk
您可以使用字段分隔符:
并定位特定的行和列:
awk -F: 'NR==4{$1="anything for dummies"}1' OFS=: file
Java for dummies:Pauline:10.56:4:3
Bash for dummies:David:10.45:4:5
PHP for dummies:Frederich:10.67:4:4
anything for dummies:Pearlyn:10.56:4:5
C++ for dummies:Jared:10.46:4:5
答案 1 :(得分:1)
如果你正在使用sed
,你可能需要引用你的表达:
sed 's|^Perl for dummies|anything for dummies|' your_file
输出:
Java for dummies:Pauline:10.56:4:3
Bash for dummies:David:10.45:4:5
PHP for dummies:Frederich:10.67:4:4
anything for dummies:Pearlyn:10.56:4:5
C++ for dummies:Jared:10.46:4:5
在开头添加-i
选项会直接改变文件。
如果您的sed支持它,我建议您使用-E
或-r
,因为它更容易。在这里你需要引用()与\:s:
sed -E 's|^Perl( for dummies)|anything\1|' your_file
该命令提供相同的输出/结果。
答案 2 :(得分:0)
如果您想在第4行进行更换:
sed '4s/[^:]*:/anything for dummies:/' input
如果您想要替换匹配'Perl for dummies':
sed '/^Perl/s//anything/' input