Bash 需要sed帮助删除倒数第2列和第3列吗
我需要使用sed来更改以下行Bash 需要sed帮助删除倒数第2列和第3列吗,bash,awk,sed,Bash,Awk,Sed,我需要使用sed来更改以下行 rec.autos.sport.f1 0000001427 0000000001 y rec.autos.sport.misc 0000000177 0000000001 y rec.music.bluenote.blues 0000000531 0000000001 y sci.med.transcription 0000000187 0000000001 m test.test.222 0000000000 00001 m 进入这个 addgroup rec.
rec.autos.sport.f1 0000001427 0000000001 y
rec.autos.sport.misc 0000000177 0000000001 y
rec.music.bluenote.blues 0000000531 0000000001 y
sci.med.transcription 0000000187 0000000001 m
test.test.222 0000000000 00001 m
进入这个
addgroup rec.autos.sport.f1 y
addgroup rec.autos.sport.misc y
addgroup rec.music.bluenote.blues y
addgroup sci.med.transcription m
addgroup test.test.222 m
我把addgroup的部分搞定了
s/\(^[a-zA-Z]\)/addgroup \1/g
我不熟悉使用sed,所以我不知道如何实现这一点。如果有人回答你所做的事情的快速解释,会有很大帮助。使用sed
在您的命令之后添加第二个替换命令:
$ sed -e 's/\(^[a-zA-Z]\)/addgroup \1/' -e 's/\( [^[:blank:]][^[:blank:]]*\)\{2\}\( [^[:blank:]]*\)$/\2/g' file
addgroup rec.autos.sport.f1 y
addgroup rec.autos.sport.misc y
addgroup rec.music.bluenote.blues y
addgroup sci.med.transcription m
addgroup test.test.222 m
或者,将其全部合并到一个s命令中:
使用扩展正则表达式,我们可以避免所有这些反斜杠。使用GNU sed:
$ sed -r 's/(.*)( [^[:blank:]]+){2}( [^[:blank:]]+)$/addgroup \1 \3/g' file
addgroup rec.autos.sport.f1 y
addgroup rec.autos.sport.misc y
addgroup rec.music.bluenote.blues y
addgroup sci.med.transcription m
addgroup test.test.222 m
使用GNU awk
OP要求sed。不过,对于那些好奇的人,这里有一个GNU awk解决方案:
$ awk '{$(NF-2)=$NF; NF-=2; printf "addgroup %s\n",$0;} ' file
addgroup rec.autos.sport.f1 y
addgroup rec.autos.sport.misc y
addgroup rec.music.bluenote.blues y
addgroup sci.med.transcription m
addgroup test.test.222 m
另一个使用tr规范化空白的awk解决方案
awk '{$1="addgroup "$1;$2=$3=""}1' file | tr -s ' '
s/^\[^[:blank:]\+\[:blank:]\[^[:blank:]\+[:blank:]\{2\}\.\$/addgroup\1\3/g
awk '{$1="addgroup "$1;$2=$3=""}1' file | tr -s ' '
sed 's/^\([^ ]\+\)[ 0-9]\+\(.\)$/addgroup \1 \2/'