使用Sed删除任何特殊字符



我还有另一个子域列表。我想删除所有包含以下特殊字符的Wildcard子域:

()!&$#*+?

大多数情况下,数据是前缀随机的。也可以是中间。下面是一些输出数据的示例

(www.imgur.com
***************diet.blogspot.com
*-1.gbc.criteo.com
------------------------------------------------------------i.imgur.com

这在扫描列表时是相当不方便的。像往常一样,我正在尝试修复它:

sed -i "/[!()#$&?+]/d" foo.txt ###Didn't work
sed -i "/[!()#$&?+]/d" ###Escaping char didn't work

执行上面的命令仍然会产生一个unchanged列表,并且文件仍然处于原始状态。我在想;为了解决这个问题,需要使用一系列的sed命令,以便逐一删除:

cat foo.txt | sed -e "/!/d" -e "/#/d" -e "/*/d" -e "/$/d" -e "/(/d" -e "/)/d" -e "/+/d" -e "/'/d" -e "/&/d" >> foo2.txt
cat foo.txt | sed -e "/!/d" | sed -e "/#/d" | sed -e "/*/d" | sed -e "/$/d" | sed -e "/+/d" | sed -e "/'/d" | sed -e "/&/d" >> foo2.txt

如果转义所有特殊字符不起作用,那一定是我的错误逻辑。我也试过用/g还是不能增加我的运气。

作为旁注:我不希望-被删除,因为一些有效的子域可以有-字符:

line-apps.com
line-apps-beta.com
line-apps-rc.com
line-apps-dev.com

我很感激你的帮助。

使用sed

$ sed '/[[:punct:]]/d' input_file

这将删除所有带有特殊字符的行,但是,如果您提供示例数据将会有所帮助。

要做你在回答中试图做的事情(将[]以及更多的字符添加到你的问题中)将是:

sed '/[][!?+,#$&*() ]/d'

或只是:

grep -v '[][!?+,#$&*() ]'

每个POSIX包含]在括号表达式中,它必须是第一个字符,否则它表示括号表达式的结束。

考虑打印你想要的行,而不是删除你不想要的行,例如:

grep '^[[:alnum:]_.-]$' file

打印只包含字母、数字、下划线、破折号和/或句号的行。

相关内容

最新更新