有没有更好更干净的方法来使用 AWK 删除字符串
Is there a better and cleaner way to remove strings using AWK
我想知道是否有更好更简洁的方法来仅使用 AWK 删除文件中每一行开头和结尾的字符串?
这是我目前得到的结果
cat results.txt | awk '{gsub("https://", "") ;print}' | tr -d ":443"
File: results.txt
https://www.google.com:443
https://www.tiktok.com:443
https://www.instagram.com:443
To get the result
www.google.com
www.tiktok.com
www.instagram.com
如果是这样的 URL 列表,您可以利用 awk
中的字段分隔符可以是正则表达式这一事实:
awk -F':(//)?' '{print }'
这表示您的字段分隔符是“:
后跟 //
”,这会将每一行拆分为:
[] http
[] www.google.com
[] 443
然后我们只打印字段
。
使用 GNU awk。
使用/
和:
作为字段分隔符并打印第四列:
awk -F '[/:]' '{print }' results.txt
或使用 https://
和 :
作为字段分隔符并打印第二列:
awk -F 'https://|:' '{print }' results.txt
输出:
www.google.com
www.tiktok.com
www.instagram.com
cat results.txt | awk '{gsub("https://", "") ;print}' | tr -d ":443"
我认为你误解了 tr -d
的作用,它用于删除枚举字符(不是子字符串),它 似乎 做你想做的,因为你的测试输入
https://www.google.com:443
https://www.tiktok.com:443
https://www.instagram.com:443
不包含:
或4
或3
应保留,如果需要测试用例会显示故障尝试
https://www.normandy1944.info:443
还有上面的代码 anti-pattern 被称为 cat 的无用使用 因为 GNU AWK
可以自行处理文件
cat results.txt | awk '{gsub("https://", "") ;print}'
可以更简洁地写成
awk '{gsub("https://", "") ;print}' results.txt
我会将您的整个代码 (cat
,awk
,tr
) 重写为单个 awk
,如下所示
awk '{gsub("^https://|:443$","");print}' results.txt
说明:将行首 (^
) 之后的 https://
或行尾 ($
) 之前的 (|
) :443
替换为空字符串(即删除这些部分)然后 print
。请注意 ^
和 $
将阻止删除字符串中间的 https://
和 :443
,但如果您可以随意删除 ^
和 $
发现这些不太可能。
我想知道是否有更好更简洁的方法来仅使用 AWK 删除文件中每一行开头和结尾的字符串?
这是我目前得到的结果
cat results.txt | awk '{gsub("https://", "") ;print}' | tr -d ":443"
File: results.txt
https://www.google.com:443
https://www.tiktok.com:443
https://www.instagram.com:443
To get the result
www.google.com
www.tiktok.com
www.instagram.com
如果是这样的 URL 列表,您可以利用 awk
中的字段分隔符可以是正则表达式这一事实:
awk -F':(//)?' '{print }'
这表示您的字段分隔符是“:
后跟 //
”,这会将每一行拆分为:
[] http
[] www.google.com
[] 443
然后我们只打印字段。
使用 GNU awk。
使用/
和:
作为字段分隔符并打印第四列:
awk -F '[/:]' '{print }' results.txt
或使用 https://
和 :
作为字段分隔符并打印第二列:
awk -F 'https://|:' '{print }' results.txt
输出:
www.google.com www.tiktok.com www.instagram.com
cat results.txt | awk '{gsub("https://", "") ;print}' | tr -d ":443"
我认为你误解了 tr -d
的作用,它用于删除枚举字符(不是子字符串),它 似乎 做你想做的,因为你的测试输入
https://www.google.com:443
https://www.tiktok.com:443
https://www.instagram.com:443
不包含:
或4
或3
应保留,如果需要测试用例会显示故障尝试
https://www.normandy1944.info:443
还有上面的代码 anti-pattern 被称为 cat 的无用使用 因为 GNU AWK
可以自行处理文件
cat results.txt | awk '{gsub("https://", "") ;print}'
可以更简洁地写成
awk '{gsub("https://", "") ;print}' results.txt
我会将您的整个代码 (cat
,awk
,tr
) 重写为单个 awk
,如下所示
awk '{gsub("^https://|:443$","");print}' results.txt
说明:将行首 (^
) 之后的 https://
或行尾 ($
) 之前的 (|
) :443
替换为空字符串(即删除这些部分)然后 print
。请注意 ^
和 $
将阻止删除字符串中间的 https://
和 :443
,但如果您可以随意删除 ^
和 $
发现这些不太可能。