在文件中选定行的开头添加“#”

在文件中选定行的开头添加“#”

要求:在文件 A 的每一行的开头添加一些内容(即 #),该文件是来自文件 B 的 grep

文件A

abcd
abdc
sdfg
asdfa
jon
ram

文件B

jon
abcd

从文件A中grep文件B并在文件A的文件开头添加“#”字符

输出应该是

#abcd
abdc
sdfg
asdfa
#jon
ram

答案1

单程:

awk 'NR==FNR{a[$0];next}$0 in a{printf "#";}1'  fileB fileA

解释:

NR==FNR{a[$0];next} => awk 将 fileB 读取到数组中。

$0 in a{printf "#";}=> 如果 fileA 的任何行与任何数组内容匹配,则在开头添加 #。

1=> 打印 fileA 的每一行

使用 sed:

$ x=$(sed -e :a -e 'N;s/\n/\\|/;ta' FileB)
$ sed "s/$x/#&/" FileA

第一个 sed 命令准备一个字符串,其中所有行都作为字符串连接在一起,并由“|”分隔。并存储在$x中。第二个 sed 在与变量 $x 中存储的任何模式匹配的行的开头插入 #。

答案2

我可以使用以下 oneliner 来做到这一点:

sed "$(for str in $(cat fileB); do echo -n "s/$str/#\0/; "; done;)" fileA

sed命令是通过循环 fileB 在子 shell 中构建的。然后用 a#和匹配的行替换匹配的行。

相关内容