Думали ли вы об использовании службы AWS Systems Manager -Patch Manager ? Они обеспечивают удобный и простой способ отслеживать, какие исправления установлены на инстансах EC2, и обновлять их (без входа в систему ).
Использование GNU sed с включенным расширенным режимом регулярных выражений -E
. Сначала мы изолируем первый столбец и запускаем команду y///
, которая будет transliterate
пространством шаблонов (, теперь оно имеет только первый столбец )в соответствии со схемой. Затем мы вспоминаем исходную строку и берем из нее 2-й столбец и отбрасываем исходный первый столбец.
sed -e '
/^\S\s/!b
s//&\n/;h
s/\n.*//
y/02345/23504/
G;s/\n.*\n//
' file
2 a
3 b
5 c
0 d
4 e
Другие подходы могут быть:
perl -lpe '
s/^\S\s/
$& =~ tr[02345]
{23504}r
/ex;
' file
Или в качестве вкладыша -:
perl -lpe 's|^\S\s|$& =~ tr/02345/23504/r|e' file
python3 -c 'import sys
ifile = sys.argv[1]
with open(ifile) as fh:
for l in fh:
l = l.strip()
p = l.find(" ")
if p == 1:
f1,rest = l[:p],l[p:];print(f1.translate(f1.maketrans("02345","23504")),rest,sep="")
else:print(l)
' file
awk -v u="02345" -v v="23504" '
BEGIN {
gsub(/./, "&" FS, u)
gsub(/./, "&" FS, v)
split(u, a)
for (i=1; i<=split(v,b); i++)
c[a[i]] = b[i]
}
$1 in c{$1=c[$1]}1
' file
$ awk 'BEGIN{split("1 3 5 0 4",map); map[0]=2} {$1=map[$1]} 1' file
2 a
3 b
5 c
0 d
4 e
С оболочкой:
while read -r idx rest; do
case $idx in
0) idx=2 ;;
2) idx=3 ;;
3) idx=5 ;;
4) idx=0 ;;
5) idx=4 ;;
esac
echo "$idx $rest"
done < test.txt
Чтобы записать вывод обратно в исходный файл, один из
tmp=$(mktemp)
while... < test.txt > "$tmp" && mv "$tmp" test.txt
или установите moreutils
и
while... < test.txt | sponge test.txt
Или жемчуг:
perl -pe '
BEGIN {%map = (0=>2, 2=>3, 3=>5, 4=>0, 5=>4)}
s{(\d+)}{$map{$1} // $1}e
' test.txt