grep并替换同一文件中的匹配文本

时间:2016-12-20 09:37:27

标签: command-line grep

我使用grep将文件中的内容拉出来并将其写入输出中。我希望连接所有这些条目的文本。目前,我分两步完成:1。grep,2。修改excel中的文本输出。

grep -E -w "entry1" file1 >output.csv

在output.csv中我得到四行匹配

A, entry1
B, entry1
C, entry1
D, entry1

我在excel中打开此文件并将column1中的行标题修改为

A_type1, entry1
B_type1, entry1
C_type1, entry1
D_type1, entry1 

是否有可能在单行中做同样的事情?

4 个答案:

答案 0 :(得分:1)

根据你给出的grep输出,我认为这一行应该有所帮助:

awk -F, '$2~/entry1/{print $1"_type1" FS $2}' file

答案 1 :(得分:0)

您可以执行类似

的操作

$ grep -E "A|B" sample.txt | perl -pe 's/A/A_type1/g; s/B/B_type1/g'

这将过滤输入文件并在输出上应用转换。输入文件保持不变。

如果您希望在文件中执行inplace repalcement而不影响其他行,则可以使用“sed”。在这种情况下,输入文件会更新。

sed -i 's/A/A_type1/g; s/B/B_typ2/g' sample.txt


admin@DESKTOP-J2E0MU7 /cygdrive/c/workspace/temp
$ cat sample.txt
A line
B file
C test1
D sample
E something else
F what
G else
A other line
B second occurence

admin@DESKTOP-J2E0MU7 /cygdrive/c/workspace/temp
$ grep -E "A|B" sample.txt | perl  -pe 's/A/A_type1/g; s/B/B_type1/g'
A_type1 line
B_type1 file
A_type1 other line
B_type1 second occurence

答案 2 :(得分:0)

使用awk将“_type1”附加到grep的任何内容的column1上的另一种解决方案。

$ grep -E "A|B" sample.txt | awk '{$1=$1"_type";print}''\

答案 3 :(得分:0)

awk -F, '{print $1"_type1",$2}' OFS=, file

A_type1, entry1
B_type1, entry1
C_type1, entry1
D_type1, entry1