我需要从 txt 文件中删除所有 http 和 https。
像这样:
http://ac.tecnicasdeinvasao.com
http://go.tecnicasdeinvasao.com
http://lp.tecnicasdeinvasao.com
https://ac.tecnicasdeinvasao.com
http://secreto.tecnicasdeinvasao.com
https://go.tecnicasdeinvasao.com
https://lp.tecnicasdeinvasao.com
https://secreto.tecnicasdeinvasao.com
到
ac.tecnicasdeinvasao.com
go.tecnicasdeinvasao.com
lp.tecnicasdeinvasao.com
ac.tecnicasdeinvasao.com
secreto.tecnicasdeinvasao.com
go.tecnicasdeinvasao.com
lp.tecnicasdeinvasao.com
secreto.tecnicasdeinvasao.com
我尝试使用 sed 但没有成功。
答案1
我更喜欢awk
,sed
所以这就是我要做的:
awk
允许您定义自定义字段分隔符,这使你的问题相当简单:
假设包含完整 URL 的文件是tstfile.txt
,声明字段分隔符( -F
) as //
,然后打印第二个字段 ( $2
):
$ awk -F'//' '{print $2}' tstfile.txt
ac.tecnicasdeinvasao.com
go.tecnicasdeinvasao.com
lp.tecnicasdeinvasao.com
ac.tecnicasdeinvasao.com
secreto.tecnicasdeinvasao.com
go.tecnicasdeinvasao.com
lp.tecnicasdeinvasao.com
secreto.tecnicasdeinvasao.com
如果您希望将结果保存在文件中,可以使用重定向>somefile.txt
。
如果您的发行版使用 GNU 版本awk
,又名gawk
,您可以选择更新您的输入文件到位:
$ awk -i inplace -F'//' '{print $2}' tstfile.txt
$
现在,内容tstfile.txt
将与上面所示完全相同,这可能会为您节省一两个步骤 - 取决于您的最终目标。其他选项,包括以不同的文件名保存原始文件,请参见这个答案。
答案2
因为你用 sed 询问
和sed更容易阅读:
sed -E 's/http.+[/]//'
和sed更容易写:
sed -E 's/http.+\///'
两者都做同样的事情。sed使用 的格式/select/replace/
,因为这样很难用\
反冲来读取。
-E
是使用正则表达式“较新”版本s
用于查找和替换s特林.+
有 2 个含义,.
点代表任何字符,在本例中 s 和+
符号用于选择 后面的所有其他内容.
- 如果一个字符在正则表达式世界中具有特殊含义,您需要转义它们,通常带有
\
反作用。在这种情况下,你需要告诉sed选择直到最后一个的所有内容/
,因此您需要像这样转义它,\/
但更难阅读\///
,最后一个是来自您也可以用括号转义//
的格式,并且因为您想删除您所选择的内容,所以您什么也不写 - >/select/replace/
[/]
//
因为一切都始于H(是一样的),所以你可以让它更短
sed -E 's/.+\///'
sed -E 's/.+[/]//'
这意味着 --> 选择从文本开头到最后一个的所有内容/
-->whateverGoesHere
/
答案3
尝试这个:
awk '{sub(/https?:\/\//,"");print}' file.txt > outfile.txt
awk
循环遍历输入行,在每行上执行程序。我没有指定任何要匹配的正则表达式,因此大括号中的代码会在每一行上执行。该sub
函数匹配斜杠之间的正则表达式,并将其替换为带引号的空字符串。正则表达式中的问号使“s”可选