Почему некоторые команды могут быть пробежал через переменную, а другие не могут?

С Perlиспользуя lookaroundsмы могли бы выполнить операцию как:

perl -pe 's/(?<=\w)(?=(?:\w{4})+$)/ /g'

Что переводится как :, когда мы стоим на позиции, слева от нас находится буквенно-цифровая цифра, а справа от нас по крайней мере 4 alnum или кратные им числа. прямо до конца строки. Всякий раз, когда такая позиция существует, пространство размещены там. Это глобально влияет на запрошенное изменение.

Мы могли бы использовать bashдля этого:

#!/bin/bash

# symbolic constants
NL=$'\012'; # newline
SP=$'\040'; # space

# elementary regexes
alnum='[0-9a-zA-Z]'; # a single alphanumeric
alnums4=$(csh -c 'repeat 4 echo -n "$1"' "$alnum"); # 4 consecutive alnums

# main processing
while IFS= read -r line res; do
   while c4=$(expr "$SP$line$NL" : ".*$alnum\($alnums4\)$NL")
   do
      res=${c4}${res:+"$SP"}${res-} line=${line%????}
   done
   printf '%s %s\n' "$line" "$res"
done

Использование редактора GNU sed:

sed -Ee '
   s/\S+/\n&\n/2; # enclose the 2nd field with markers

   # a do-while loop to progessively move the right marker to the left,
   # consuming 4 alnums in each iteration. Looping stops when 4 alnums+
   # 1 alnum at the boundary remains.
   :loop
      s/(\n[[:alnum:]].*)([[:alnum:]]{4})\n/\1\n \2/
   tloop

   # clear out the markers when done
   s/\n//g
'
0
05.11.2019, 12:47
1 ответ

Обертка кавычек экранирует специальные символы, поэтому они обрабатываются как литералы. Чтобы вызвать поведение, которое вы ищете, вам нужно будет сделать

eval "$nnn"
eval "$duper"
0
28.01.2020, 03:08

Теги

Похожие вопросы