我希望在冒号之间交换字符,以便两侧相互替换。
示例:输入
1: Hello
2: World
3: I
4: am
5: Brendan
输出:
Hello: 1
World: 2
I: 3
am: 4
Brendan: 5
我尝试过使用 cut 和 sed 但找不到正确的方法。
答案1
你可以试试这个awk
awk 'BEGIN{FS=OFS=": "}{print $2, $1}' file.txt
或者 sed 有一个-E
选项。
sed -E 's/(.+): (.+)/\2: \1/' file.txt
或者是更慢(如果不是最慢)的 shell 解决方案。
while IFS=": " read -r first second; do
printf '%s: %s\n' "$second" "$first"
done < file.txt
答案2
无论输入是一行或多行,都尝试此操作:
awk 'BEGIN{FS="[: ]*"; OFS=":" }{for (i=2; i<=NF; i+=2) printf "%s: %s ", $i, $(i-1); print _}' file