Я должен удалить каждое слово, содержащее хотя бы одно число из каждого файла, заданного через командную строку в качестве параметра. Это мой код:
while [ "$*" != "" ]; do
if [ ! -f $1 ]
then echo "$1 not file"
else
sed -ie "s/[^ ]*[0-9][^ ]*//g" $1
fi
shift
done
Это прекрасно работает, если у меня есть только один файл, но если у меня больше, он дает одинаковый результат для каждого. После запуска скрипта в каждом файле будет результат первого.
Может кто-нибудь сказать мне, что мне не хватает?
EDIT2:
Это то, что я бегу сейчас:
while [ "$#" -ne 0 ]; do
for file in "$@"; do
if [ ! -e "$file" ]; then
printf "file doesn't exist: %s\n" "$file"
continue;
fi
if [ ! -f "$file" ]; then
printf "not a file: %s\n" "$file"
continue;
fi
done
sed -i "s/[^ ]*[0-9][^ ]*//g" "$file"
done
Я говорил о цикле done для while и цикле done for; но даже без этого мой скрипт продолжает работать.
EDIT:
В основном одно и то же, немного другое. Я должен удалить второе и четвертое слово из каждой строки из каждого файла (слово содержит только буквенно-цифровые символы). Это не работает должным образом, и я не могу найти ошибку. Это мой код:
while [ "$*" != "" ]; do
if [ ! -f $1 ]
then echo "$1 not file"
else
sed -ie 's/^\( *[^ ]+\) +[^ ]+\(.*\)/\1\2/
s/^\( *[^ ]+\)\( +[^ ]+\) +[^ ]+\(.*\)/\1\2\3/g' $1
fi
shift
done