Вы можете использовать awk
и оставить только нужные поля:
echo -e "abc def bac 123\nabc def def bac 123\nabc def def def bac 123 123" \
| awk -v var1="def" -v var2="123" '{
i=0
for (j=1; j<=NF; j++){
if ($j==var1 || $j==var2){ $++i=$j }
if (i!=j){ $j="" }
}
print
}'
Это перебирает поля в цикле for -и переназначает def
или 123
следующему полю $++i=$j
(, начиная с индекса 0, поэтому первое поле равно 1, следующее — 2... )и сбрасывает текущее поле $j
в пустую строку ($j=""
), если индекс i
не является индексом цикла j
.
Выход:
def 123
def def 123
def def def 123 123
Просто снимите глобус из кавычек.
myscript.sh "0$i"*".pdf"
Похоже, вы обеспокоены тем, что *
превратится в строку, содержащую пробелы, b
? Это не проблема, после расширения пути (, известного как подстановка ), пробелы теряют свое синтаксическое значение и становятся буквальными.
См. пример выполнения:
$ ls -1
'01a b.pdf'
'01e f.pdf'
'02c d.pdf'
myscript.sh
$ cat myscript.sh
#!/bin/sh
for file in "$@"; do
echo "$file"
done
$ i=1
$./myscript.sh "0$i"*".pdf"
01a b.pdf
01e f.pdf