возможно ли изменить первые 4 (или более) вхождения строки в этом сценарии с помощью SED (напротив sed -r 's/[^[:space:]]*/TEST/4g'
):
TEST TEST TEST TEST five six seven
Я получаю работу с обратным порядком слов в строке с использованием AWK дважды, но это долго, сложно, и я хочу получить это только с помощью SED:
echo one two three four five six seven | awk '{for(i=NF;i>=1;i--) printf "%s ", $i;print ""}' | sed -r 's/[^ ]*/TEST/4g' | awk '{for(i=NF;i>=1;i--) printf "%s ", $i;print ""}'
Также, возможно, есть возможность изменить диапазоны встречаемости, такие как 3-5, 6-12, ...?
Пример ввода:
один два три четыре пять шесть семь
восемь девять десять одиннадцать двенадцать тринадцать четырнадцать
пятнадцать шестнадцать семнадцать восемнадцать девятнадцать двадцать двадцать один
rev
:echo one two three four five six seven | rev | sed 's/[^ ]*/TSET/4g' | rev
. Я пытаюсь найти лучший, так как команду sed необходимо обновить, если строка содержит другое количество слов. - person Corentin Limier   schedule 17.06.2019sed
, но нельзя делать диапазоны:sed 's/[^ ][^ ]*/\n&/g;:t;/\n/{x;/.\{4\}/!{s/$/./;x;s/\n[^ ][^ ]*/TEST/;bt};x};s/\n//g' <<< "one two three four five six seven"
- person Wiktor Stribiżew   schedule 17.06.2019sed 's/\S\+/\n&/g;s/\n//5g;s/\n\S\+/TEST/g' file
диапазонов в строке можно получить с помощью аналогичного метода. - person potong   schedule 18.06.2019TEST
только один раз. - person stevesliva   schedule 18.06.2019