Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 需要sed帮助删除倒数第2列和第3列吗_Bash_Awk_Sed - Fatal编程技术网

Bash 需要sed帮助删除倒数第2列和第3列吗

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.

我需要使用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.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/'