如果缺少字符串,如何检查文件是否自动添加(例如输入)
输入文件test.txt
我想在所有行中加上“文本”。
期望输出
有可能吗?事先非常感谢
嗨,伙计们,谢谢你们的帮助,因为我的案子没那么简单。我不知道哪一行会不同,在中间的字符串中,它不仅有一个字符串。我会给出一个更清楚的例子
输入文件test.txt
所需输出文件test2.txt
所以那些缺少“角色”的人将添加“角色”:
发布于 2013-11-11 21:28:41
如果你把你的问题正规化一点的话,它会有帮助:目前还不清楚什么是确定“角色:”文本应该在什么位置的标准。然后,实现将是在正则表达式替换中重新定义它的问题。例如,如果您希望始终在第二位之前拥有“角色”:“那么您可以这样做:
perl -pe 's/^(.*?:.*?)(?:\sRole)?:/$1Role:/' test.txt如果您想显示使用'-‘进行替换的位置,那么稍微复杂一些的表达式将是:
perl -pe 's/^([^:]+:[^:]+)(?<!Role):/$1 Role: -/' 1.txt输出:
Group: IT_DEPT,VIP Role: Viewer Dept: IT
Group: IT_DEPT,VIP Dept Role: - IT
Group: FINANCE LOAN VIEWER Role: Viewer Dept: FINANCE
Group: FINANCE LOAN VIEWER Dept Role: - FINANCE它不是像你的例子中那样精确的输出,但是同样,你需要正规化你想要添加的角色:-。我拿第二名:“举个例子。”
可以通过更简单的代码来实现精确的输出:
perl -pe 's/Dept:/Role: - Dept:/ unless /Role:/' 1.txt输出:
Group: IT_DEPT,VIP Role: Viewer Dept: IT
Group: IT_DEPT,VIP Role: - Dept: IT
Group: FINANCE LOAN VIEWER Role: Viewer Dept: FINANCE
Group: FINANCE LOAN VIEWER Role: - Dept: FINANCE发布于 2013-11-10 22:53:10
不是最干净的,但这将满足您的要求:
#!/bin/bash
awk '{
for(i = 1; i <= NF; i++) {
if ($i == "test" && $(i + 1) != "text") {
$i = "test text"
}
}
print $0
}' input_file > output_file发布于 2013-11-10 23:00:27
对于当前的示例,这个awk一行程序应该可以工作:
awk '$5!="text"{$5="text "$5}7' file测试:
kent$ cat f
this is a test text for testing purpose
this is a test for testing purpose
this is a test for testing purpose
this is a test text for testing purpose
kent$ awk '$5!="text"{$5="text "$5}7' f
this is a test text for testing purpose
this is a test text for testing purpose
this is a test text for testing purpose
this is a test text for testing purposehttps://stackoverflow.com/questions/19896160
复制相似问题