【问题标题】:Sed - How to switch two words in a line [duplicate]Sed - 如何在一行中切换两个单词[重复]
【发布时间】:2017-04-11 16:19:01
【问题描述】:

我正在尝试编写一个 shell 脚本来切换一行中的第一个和第三个单词。在这种情况下,只有包含字母(大写和小写)的字符串才算作单词,其他所有内容(数字、标点符号、空格)都被视为空格。 例如:

abc123def. ghi...jkl

会变成:

ghi123def. abc...jkl

我尝试了以下方法,但它不起作用:

sed 's/\([a-zA-Z][a-zA-Z]*\)[^A-Z^a-z]\([a-zA-Z][a-zA-Z]*\)[^A-Z^a-z]\([a-zA-Z][a-zA-Z]*\)/\3 \2 \1/' input.txt

【问题讨论】:

  • 需要sed吗? awk 通常更适合将行视为单词序列。
  • 很遗憾,是的。

标签: linux bash shell sed


【解决方案1】:

sed:

$ echo "abc123def. ghi...jkl" | sed -r 's/([A-Za-z]*)([^A-Za-z]*[A-Za-z]*[^A-Za-z]*)([A-Za-z]*)(.*)/\3\2\1\4/g'
$ ghi123def. abc...jkl

【讨论】:

  • 谢谢!这不是我需要的完全,只是因为我不清楚这些行不一定以单词开头。这是我使用的变体:sed -r 's/([^A-Za-z]*)([A-Za-z]+)([^A-Za-z]+[A-Za-z]+[^A-Za-z]+)([A-Za-z]+)(.*)/\1\4\3\2\5/g'
猜你喜欢
  • 2021-10-08
  • 2019-03-07
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2013-11-23
  • 2011-03-17
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多