Sed 从shell变量中存储的行中删除或删除任何空字段
输入: 输出:Sed 从shell变量中存储的行中删除或删除任何空字段,sed,grep,Sed,Grep,输入: 输出: | |19.2°E| | |Astra 1L| |11597.00|V|26|Astra 1L|DVB-S|QPSK|22000| |5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026| | | 尝试使用sed和类似的方法: 19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33
| |19.2°E| | |Astra 1L| |11597.00|V|26|Astra 1L|DVB-S|QPSK|22000| |5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026| | |
尝试使用sed和类似的方法:
19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026
您可以使用此sed:
echo $line | sed -r 's/\|\s*\|//g'
它也适用于非gnu sed,如BSD sed。通过grep和sed
sed 's/|[[:blank:]]\{1,\}//g; s/^|//; s/|$//' file
19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026
…|grep-oP'(?由GNU提供)
$ echo '| |19.2°E| | |Astra 1L| |11597.00|V|26|Astra 1L|DVB-S|QPSK|22000| |5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026| | |' | grep -oP '(?<=\|)[^|]*[^|\s][^|]*' | sed ':a;N;$!ba;s/\n/|/g'
19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026
如果指定为变量,请使用此命令
sed -r ':a s/\|\s*\|/|/g ;t a' infile
|19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026|
工作正常,输出正是我所期望的。不是真的,如果你有键as|19.2°;E |
,你将在输出中丢失空白。但是如果你不介意,那很好。命令也可以工作,但|已经在输出的开头。如果你需要,只需使用s/^//;s/$/
,用于移除头部和尾部|
sed -r ':a s/\|\s*\|/|/g ;t a' infile
|19.2°E|Astra 1L|11597.00|V|26|Astra 1L|DVB-S|QPSK|22000|5/6|ASTRA 1|, 33.8 Mbps |NID:1|TID:1026|
echo $line |sed -r ':a s/\|\s*\|/|/g ;t a'