Еще один общий инструмент командной строки был бы ed
, который по умолчанию изменяет оперативные файлы и поэтому оставляет полномочия файла неизмененными (для получения дополнительной информации о ed
посмотрите файлы Редактирования с текстовым редактором редактора из сценариев),
str='
foo bar \
bash 1 \
bash 2 \
bash 3 \
bash 4 \
baz
dude \
happy
xxx
vvv 1 \
vvv 2 \
CCC
'
# We are using (1,$)g/re/command-list and (.,.+1)j to join lines ending with a '\'
# ?? repeats the last regex search.
# replace ',p' with 'wq' to edit files in-place
# (using Bash and FreeBSD ed on Mac OS X)
cat <<-'EOF' | ed -s <(printf '%s' "$str")
H
,g/\\$/s///\
.,.+1j\
??s///\
.,.+1j
,p
EOF
Awk сделал бы это самым кратким:
system_profiler SPHardwareDataType | awk -F': ' '/Memory:/{print $2}'
Это - все, в чем Вы действительно нуждаетесь для Perl один:
system_profiler SPHardwareDataType | perl -nle '/ry:\s*(.*)/ && print $1'
Некоторый другой выбор:
system_profiler SPHardwareDataType | /bin/grep Me | gawk '{print $2,$3}'
Используя/bin/grep избавляет от необходимости --color=never
. grep
определяется как псевдоним к grep --color=auto
в /etc/bash.bashrc
(по крайней мере, это находится на большинстве дистрибутивов Linux и, я предполагаю на OSX).
system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'
-o
причины grep toprint только подобранные символы.
system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5
system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'
system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'
p
вот флаг к s
команда (как g
), не p
команда и средства печатают пространство шаблона, если замена происходит. Вам не нужно g
здесь, так как шаблон может только соответствовать однажды.