如果缺少字符串自动添加它,我如何检查文件中的字符串 输入
输入文件test.txt
我想在所有行中添加“text”
期望输出
有可能吗?非常感谢提前
大家好,感谢您的帮助,因为我的情况并非那么简单。我不知道哪一行会有所不同,在中间的字符串中它不仅会有一个字符串。我会给出一个更清楚的案例
输入文件test.txt
所需的输出文件test2.txt
所以那些缺少“角色:”的人会加上“角色: - ”,希望这清楚的事情,再次提前感谢
答案 0 :(得分:0)
不是最干净的,但这符合您的要求:
#!/bin/bash
awk '{
for(i = 1; i <= NF; i++) {
if ($i == "test" && $(i + 1) != "text") {
$i = "test text"
}
}
print $0
}' input_file > output_file
答案 1 :(得分:0)
对于你当前的例子,这个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 purpose
答案 2 :(得分:0)
如果你将问题正式化了一下会有所帮助:目前还不清楚确定“角色:”文本应该在哪里的标准是什么。然后,实现将是在正则表达式替换中重新表达它的问题。例如,如果你想在第二个':'之前总是拥有'角色',那么你可以这样做:
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