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

Using sed to output only single word listed before a comma

我正在学习 sed 并且已经接近找到以下问题的解决方案:

Print the lines of all Oceania countries that have a one word name (example: print Australia but not Solomon Islands)

命令:

sed -n -e 's/\(.*\)\(,OC,\)\(.*\)//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 在单独的命令中实现以下目的:

我也很想知道 <TAB> 在 sed 中的正确字符是什么,尤其是像这样的命令:

sed 's/,/<TAB>/'

我已经看到了 <Control-V><TAB> 技巧,但是有没有可以替代使用的字符集?

我知道您要求 sed,但有时其他程序可能会像 awk 在这种情况下做得很好。
这将适用于选项卡和 space 以及多个 space/tabs.

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

这可能适合您 (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

在删除带有 space

的行之前删除尾随 spaces
sed -e 's/ *$//' -e '/ / d'

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