使用sed只输出逗号前列出的单个单词

时间:2015-02-01 21:20:32

标签: regex bash sed

我正在学习sed并且已经接近解决以下问题:

  

打印所有具有单字名称的大洋洲国家/地区的行   (例如:印刷澳大利亚但不是所罗门群岛)

命令:

sed -n -e 's/\(.*\)\(,OC,\)\(.*\)/\1/p' countries

输出:

American Samoa
Australia
Cook Islands
Fiji
Micronesia
Guam
Kiribati
Marshall Islands
Northern Mariana Islands
New Caledonia
Norfolk Island
Nauru
Niue
New Zealand
French Polynesia
Papua New Guinea
Pitcairn
Palau
Solomon Islands
Tokelau
Tonga
Tuvalu
United States Minor Outlying Islands
Vanuatu
Wallis and Futuna
Samoa

我想知道如何使用sed在单独的命令中实现以下功能:

  • 删除带空格的行
  • 删除没有空格的行

我也很想知道sed中<TAB>的正确字符是什么,尤其是使用如下命令:

sed 's/,/<TAB>/'

我见过<Control-V><TAB>技巧,但有没有可以替代使用的字符集?

3 个答案:

答案 0 :(得分:2)

我知道你要求sed,但在某些情况下,其他程序可能会像awk那样正常工作。在这种情况下。
这将适用于制表符和空格以及多个空格/制表符。

awk 'NF==1' file
Australia
Fiji
Micronesia
Guam
Kiribati
Nauru
Niue
Pitcairn
Palau
Tokelau
Tonga
Tuvalu
Vanuatu
Samoa

只打印一个字段打印所有行。


有多个字段。

awk 'NF!=1'
American Samoa
Cook Islands
Marshall Islands
Northern Mariana Islands
New Caledonia
Norfolk Island
New Zealand
French Polynesia
Papua New Guinea
Solomon Islands
United States Minor Outlying Islands
Wallis and Futuna

这应该可行:

awk NF==1 file

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed '/[[:space:]]/d' file # removes lines with space(s)

sed '/[[:space:]]/!d' file # removes lines with no space(s)

使用制表符替换逗号:

sed 's/,/\t/' file

或带标签的所有逗号都使用:

sed 'y/,/\t/' file

答案 2 :(得分:0)

删除尾随空格,然后删除带空格的行

sed -e 's/ *$//' -e '/ / d'

(看起来像grep -v " ")。