如何在unix中删除文件中以特定模式开头的单词
我想删除文件中以3:和4:开头的所有单词 例如— 输入为如何在unix中删除文件中以特定模式开头的单词,unix,sed,awk,Unix,Sed,Awk,我想删除文件中以3:和4:开头的所有单词 例如— 输入为 13 1:12 2:14 3:11 10 1:9 2:7 4:10 5:2 16 3:7 8:24 7 4:7 6:54 输出应为 13 1:12 2:14 10 1:9 2:7 5:2 14 8:24 7 6:54 有人能告诉我是否可以使用sed命令或awk命令。使用awk: awk '{for (i=1; i<=NF; i++) {if (! sub("^[34]:", "", $i)) d=d$i" "}
13 1:12 2:14 3:11
10 1:9 2:7 4:10 5:2
16 3:7 8:24
7 4:7 6:54
输出应为
13 1:12 2:14
10 1:9 2:7 5:2
14 8:24
7 6:54
有人能告诉我是否可以使用sed命令或awk命令。使用awk
:
awk '{for (i=1; i<=NF; i++)
{if (! sub("^[34]:", "", $i)) d=d$i" "}
print d; d=""
}' file
使用awk
:
awk '{for (i=1; i<=NF; i++)
{if (! sub("^[34]:", "", $i)) d=d$i" "}
print d; d=""
}' file
与塞德
sed -r 's/ 3:[0-9]*| 4:[0-9]*//g'
$ cat input.txt
13 1:12 2:14 3:11 10 1:9 2:7 4:10 5:2 16 3:7 8:24 7 4:7 6:54
$ cat input.txt | sed -r 's/ 3:[0-9]*| 4:[0-9]*//g'
13 1:12 2:14 10 1:9 2:7 5:2 16 8:24 7 6:54
说明:
=正则表达式搜索-r
:搜索一个空格,然后是3,然后是:,然后是[0-9]或一个介于0和9之间的数字,*表示他将在前一个正则表达式搜索中搜索零个或多个点击,即[0-9],因此*表示在这种情况下,将在以下第一个数字后面搜索零个或多个数字:3:[0-9]*
:表示或|
:与上面相同,只是它将搜索4而不是34:[0-9]*
:替换字符串,如果你把POTATOE关起来,它将键入它,在这种情况下,sed将不键入任何内容李>/
:搜索传递给sed的所有输入/g
sed -r 's/ 3:[0-9]*| 4:[0-9]*//g'
$ cat input.txt
13 1:12 2:14 3:11 10 1:9 2:7 4:10 5:2 16 3:7 8:24 7 4:7 6:54
$ cat input.txt | sed -r 's/ 3:[0-9]*| 4:[0-9]*//g'
13 1:12 2:14 10 1:9 2:7 5:2 16 8:24 7 6:54
说明:
=正则表达式搜索-r
:搜索一个空格,然后是3,然后是:,然后是[0-9]或一个介于0和9之间的数字,*表示他将在前一个正则表达式搜索中搜索零个或多个点击,即[0-9],因此*表示在这种情况下,将在以下第一个数字后面搜索零个或多个数字:3:[0-9]*
:表示或|
:与上面相同,只是它将搜索4而不是34:[0-9]*
:替换字符串,如果你把POTATOE关起来,它将键入它,在这种情况下,sed将不键入任何内容李>/
:搜索传递给sed的所有输入/g
sed "s/ \([34]:[^\b]+\)//g" inputfile
这将匹配空格、3或4、冒号以及至少一个非单词边界。它将不替换任何内容,并对整行执行此操作。假设所有单词都包含:并且在以下数字后至少有一个数字:
sed "s/ \([34]:[^\b]+\)//g" inputfile
这将匹配空格、3或4、冒号以及至少一个非单词边界。它将不替换任何内容,并对整个行执行此操作。这可能适用于您(GNU-sed):
查找单词边界,然后查找3
或4
后跟:
和零个或多个非空格后跟零个或多个空格,并在整行中删除它们。这可能适用于您(GNU-sed):
sed 's/[[:blank:]][34]:[^[:blank:]]\{1,\}[[:blank:]]*/ /g' YourFile
查找单词边界,然后查找3
或4
后跟:
和零个或多个非空格后跟零个或多个空格,并在整行中删除它们
sed 's/[[:blank:]][34]:[^[:blank:]]\{1,\}[[:blank:]]*/ /g' YourFile
Posix兼容,并假设没有(如示例中)第一个单词以3:或4:表示
Posix兼容,并假设没有(如示例中)第一个单词以3:或4:表示。这将在删除字段的任何地方留下额外的空间。我现在使用另一种不留空间的方法进行了更新,就在行的末尾。这将在删除字段的任何地方留下额外的空间。我现在用另一种不留空间的方法进行了更新,就在行尾。
\b
的对立面是\b
,但是它是一个锚定而不是一个字符,可以在这个上下文中使用。\b
的对立面是\b
但是它是一个锚定而不是一个字符,可以在这个上下文中使用。在这种情况下,不需要进行替换,因为3 | 4
可以被替换通过[34]
。但是,这不会删除行首的任何此类字符串,因为它正在regexp的开头寻找一个空格。Poton部分正确:)不需要交替,但如果我们假设每行的第一个数字后面永远不会有一个:,那么它就可以正常工作。无论如何,这里有一个较短的版本sed-r的//[34]:[0-9]*///g'替换在这种情况下是不必要的,因为3 | 4
可以替换为[34]
。但是,这不会删除行首的任何此类字符串,因为它正在regexp的开头寻找一个空格。Poton部分正确:)不需要交替,但如果我们假设每行的第一个数字后面永远不会有一个:,那么它就可以正常工作。无论如何,这里有一个较短的版本sed-r的//[34]:[0-9]*///g'