Awk
將字元串附加到變數中的多個空格分隔值
我
VAR="XYZ YZA ZAB"
聲明了一個變數,我想在該變數中的所有單詞旁邊附加一些字元串。例如:我想附加
.file1
到XYZ YZA ZAB
.變數的輸出應該如下所示,沒有任何
for loop
或任何東西。VAR="XYZ.file1 YZA.file1 ZAB.file1"
我確信
awk
可以使用,但我不知道如何將其用於此目的。
與
ksh93
:VAR2=${VAR//+([^[:space:]])/\1.file1}
與
zsh
:set -o extendedglob VAR2=${VAR//(#m)[^[:space:]]##/$MATCH.file1}
POSIXly:
VAR2=$(printf '%s\n' "$VAR" | sed 's/[^[:space:]]\{1,\}/&.file1/g')
(請注意,它會刪除尾隨的換行符(如果有
$VAR
)。它們都用相同的東西 ( , , )替換一個或多個 (
+(...)
,##
,\{1,\}
) 字元的序列,而不是空格字元 ( ) 並附加。[^[:space:]]``\1``$MATCH``&``.file1
或者,如果您不關心保留單詞之間的空白量並且單詞僅由 SPC、TAB 和 NL(而不是其他空白字元)分隔,則可以拆分和加入:
unset IFS # default IFS of SPC+TAB+NL set -o noglob # disable glob set -- $VAR # split+glob without glob for i do set -- "$@" "$i.file1" # add suffix shift done VAR2="$*" # join with space
使用支持數組的 shell,您可能希望使用數組變數而不是標量變數。與
rc
/es
/zsh
/ksh93
/bash
/mksh
/yash
:VAR=(XYZ YZA ZAB)
然後添加
.file1
到每個元素(這一次可能包含空格本身)只是一個問題:VAR2=($VAR^.file1) # rc, es VAR2=($^VAR.file1) # zsh VAR2=("${VAR[@]/*/\0.file1}") # ksh93 VAR2=("${VAR[@]/%/.file1}") # bash