Заменить первые четыре символа строки - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно замаскировать с помощью регулярного выражения в редакторе Sed строку после 4 символов.

Пример: 1234567890
Результат: 1234XXXXXX

Можете ли вы мне помочь?

Ответы [ 5 ]

0 голосов
/ 05 июня 2018

С седом

count=4
echo "1234567890" | \
sed ':A;s/\(\(.\)\{'"$count"'\}\)\(X*\)[^X]/\1\3X/;tA'

или

sed -E ':A;s/((.){'"$count"'})(X*)[^X]/\1\3X/;tA'
0 голосов
/ 05 июня 2018

С помощью perl вы можете поместить произвольный код perl в текст замены:

perl -pe 's/^(....)(.*)/$1 . "X" x length($2)/e' <<END
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
END
1
12
123
1234
1234X
1234XX
1234XXX
1234XXXX
1234XXXXX
1234XXXXXX
0 голосов
/ 05 июня 2018

В GNU sed:

echo "1234567890" | sed "s/./X/5g"
0 голосов
/ 05 июня 2018
$echo "1234567890"|awk '{for(i=5;i<=NF;i++)$i="X"}7' FS="" OFS=""
1234XXXXXX 
0 голосов
/ 05 июня 2018

После awk может помочь вам здесь.

echo "1234567890" | awk '{for(i=5;i<=length($0);i++){val=val?val "X":"X"};print substr($0,1,4) val;val=""}'

Вывод будет следующим.

1234XXXXXX
...