如何删除以 #
开头的子字符串以及 #
之后的所有内容?
有很多在不同的线路上;它们都以#
开头,都在行尾,而且行尾的数字总是不同的。它们都是 15 个字符长;我想使用 sed 或 awk 删除从 #
到行尾的所有内容。
http://www.somesite/play/episodes/xyz/fred-episode-110#group=p02q32xl
http://www.somesite/play/episodes/abc/simon-episode-266#group=p03d924k
http://www.somesite/play/episodes/qwe/mum-episode-39#group=p03l1jpr
http://www.somesite/play/episodes/zxc/dad-episode-41#group=p03l1j9s
http://www.somesite/play/episodes/asd/bob-episode-57#group=p03l1j7g
最佳答案
使用
cut
– 将#
声明为字段分隔符并只打印第一个字段:cut -d '#' -f 1 infile
使用 sed – 将
#
开始的所有内容替换为空字符串:sed 's/#.*//' infile
使用 awk – 将
#
声明为字段分隔符并打印第一个字段:awk -F'#' '{ print $1 }' infile
使用 Bash,利用它始终是最后 15 个字符这一事实:
while IFS= read -r line; do echo "${line:0:-15}" done < infile
请注意,这 a) 非常慢并且 b) 需要 Bash 4.2-alpha 或更新版本来支持参数扩展中的负长度值。
使用 Perl – 按
#
拆分,获取列表的第一个字段并使用say
打印它以包含换行符:perl -nE 'say ((split /#/)[0])' infile
或者,更简洁和 sed-ish(指出我的 mklement0 ):
perl -pe 's/#.*//' infile
关于linux - 删除以 # 开头的字符串以及 # 之后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36075344/