如何删除以#
开头的子字符串以及#
之后的所有字符串?
他们中有很多人在不同的路线上;它们都以#
开头并且位于该行的末尾,并且最后的数字总是不同的。它们都是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
答案 0 :(得分:3)
使用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
答案 1 :(得分:1)
补充Benjamin W.'s helpful answer:
grep
是另一种选择:
如果您不想加入#
:
grep -Eo '^[^#]+' file
如果您想要加入#
:
grep -Eo '^[^#]+.' file
答案 2 :(得分:0)
Using Python Regex (.*?)(#.*)
并替换为\1
: