Я думаю, что все еще не понимаю полностью, что Вы спрашиваете здесь. Но free -o -m | awk '{print $4}'
дает Вам вывод формы:
общий
123
456
Для проверки 123 и 456 против условия на ударе, Вы могли использовать для цикла вместо fiddeling с regexes:
for value in `free -o -m | awk '{print $4}'`; do
if [[ "$value" != "shared" && CONDITION ]]; then echo "$value matched my condition"; fi;
done;
Один из способов - использовать read
, чтобы разбить строку на первое слово и остальные, а затем вызвать rev
только для первого слова
$ echo "a,b,c,d Access" | { read -r first rest; printf '%s %s\n' "$(rev <<< "$first")" "$rest"; }
d,c,b,a Access
A perl
решение:
$ echo "a,b,c,d Access" | perl -anle 'print ~~reverse($F[0])," @F[1..$#F]"'
d,c,b,a Access
Справедливое предупреждение: это зависит от запятых.
echo "a,b,c,d Access" | tr ,\ '[\n*]' |
sed '1!G;$s/\n/,/g;s/\([^,]*\),\(.*\)/\2 \1/p;h;d'
d,c,b,a Access
Это длинновато - дольше, чем должно быть. Так проще:
set -f ; IFS=,\
set -- ${0+a,b,c,d Access}
while [ -n "${2+?}" ]
do r="$1,$r"
shift ; done
echo "${r%,} $1"
d,c,b,a Access
OUTPUT
d,c,b,a Access
Still kinda long, but but least it makes sense. С функцией становится немного проще, потому что вы получаете массив оболочки. Например:
rev() ( i=
set -f ; IFS=$1 ; shift ; set -- $*
until [ "$((i=${i:=($#+1)}-1))" -eq 0 ]
do [ "$i" -gt 1 ] && s=$IFS || s=
eval printf '"%s$s"' \""\$$i"\"
done
)
rev , a,b,c,d && echo \ Access
d,c,b,a Access
Или, если он есть в переменной:
var="a,b,c,d Access"
rev , "${var% *}" && echo " ${var##* }"
d,c,b,a Access
С sed
:
sed 's/^/ /;:1
s/^\([^ ]*\) \([^ ]\)/\2\1 /;t1
s/ //'
С perl
:
perl -pe 's/\S+/reverse $&/e'
С zsh
:
string='a,b,c,d Access'
setopt extendedglob
result=${string/(#m)[^ ]#/${(j::)${(Oas::)MATCH}}}
В зависимости от Neven response:
Вы можете сделать это, используя этот скрипт оболочки:
#!/bin/bash
secondPart=`echo "a,b,c,d Access" | awk '{print $2} '`
firstPart=`echo "a,b,c,d Access" | awk '{print $1} '| awk -F , '{print $4","$3","$2","$1""}'`
echo "$firstPart $secondPart"
в командной строке просто напечатайте:
sh yourShellscript.sh
или используя одну командную строку как Jidder введенную:
awk '$1=gensub(/(.),(.),(.),(.)/,"\\4,\\3,\\2,\\1","g",$1)' <<< "a,b,c,d Access"