我有一个带有以下内容的变量$ MYVAR:
Line 5
Line 4
Line 3
Line 2
Line 1
我想要的是改变变量的内容,如下所示:
(1st iteration) (2nd iteration) (3rd iteration)
Line 5 Line 5 Line 5
Line 4 Line 4 Line 3
Line 3 Line 2 Line 2
Line 1 Line 1 Line 1
Line 2 Line 3 Line 4
- >将变量的最后一行与从变量末尾开始计数的第n + 1行交换(行数可以改变)。
到目前为止我得到了什么:
counter=1
function change_selection {
src=$( echo "$MYVAR" | wc -l )
dest=$((src-$counter))
MYVAR=$( echo "$MYVAR" | sed -ne "${src}BIGPROBLEM${dest}" )
$((counter++))
}
你能帮我解决一下“BIGPROBLEM”部分吗? ;)我认为sed hold和pattern space命令可以帮助我,但我无法理解它...
答案 0 :(得分:0)
Stop using sed
to modify a multi-line string, and use an array instead.
array=(
"Line 5"
"Line 4"
"Line 3"
"Line 2"
"Line 1"
)
counter=1
change_selection () {
src=$((${#array[@]} - 1 ))
dest=$((src - counter))
tmp="${array[dest]}"
array[dest]=${array[-1]}
array[-1]=$tmp
((counter++))
}
答案 1 :(得分:0)
使用sed:
sed '2{h;d;};$G;' <<< "$MYVAR"
2{h;d}
:第2行存储在保留空间中并从模式空间中删除$G
:将持有空间内容添加到变量末尾的模式空间