如何跨冒號交換字元?

如何跨冒號交換字元?

我希望在冒號之間交換字符,以便兩側相互替換。

範例:輸入

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

相關內容