如何使用sed在一行中只显示一些单词?

时间:2017-10-25 05:08:11

标签: linux sed grep

我正在尝试使用sed仅在一行中显示1st2nd8th字词。

我遇到的问题是单词是随机的,单词之间的空格量也是随机的......例如:

QST334   FFR67     HHYT  87UYU HYHL 9876S   NJI QD112    989OPI

有没有办法让它输出为第1,第2和第8个单词:

QST334 FFR67 QD112

感谢您对正确方向的任何建议或提示!

4 个答案:

答案 0 :(得分:1)

使用awk

awk '{print $1,$2,$8}' file

行动中:

$ echo "QST334 FFR67 HHYT 87UYU HYHL 9876S NJI QD112 989OPI" | awk '{print $1,$2,$8}'
QST334 FFR67 QD112

答案 1 :(得分:1)

你真的不需要在另一个答案中提到的两列之间放置" "。默认情况下,awk会将单个空格视为输出字段分隔符AKA OFS。所以你只需要所需列之间的逗号。

所以关注就够了:

awk '{print $1,$2,$8}' file

例如:

echo "QST334   FFR67     HHYT  87UYU HYHL 9876S   NJI QD112    989OPI" |awk '{print $1,$2,$8}'
QST334 FFR67 QD112

但是,如果您希望有其他OFS,那么您可以按照以下步骤操作:

echo "QST334   FFR67     HHYT  87UYU HYHL 9876S   NJI QD112    989OPI" |awk -v OFS="," '{print $1,$2,$8}'
QST334,FFR67,QD112

请注意,这将在输出列之间添加逗号。

答案 2 :(得分:0)

另一种解决方案是使用cut command

cut --delimiter '<delimiter-character>' --fields <field> <file>

其中:

  • '<delimiter-character>'> :是要解析字符串的分隔符。
  • <field> :指定要输出的列,可以是单个列1,多个列1,3还是其中一列1-3

行动中:

cut -d ' ' -f 1-3 /path/to/file

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/\s\+/\n/g;s/.*/echo "&"|sed -n "1p;2p;8p"/e;y/\n/ /' file

将空格转换为换行符。将每行评估为单独的文件,并仅打印所需的行,即字段。用空格替换剩余的换行符。