Вы можете использовать read
для разделения строк на основе пробелов (, которые, похоже, используются в вашем файле ). Что-то вроде этого:
while read set year; do
DoStuffWith "$set" "$year"
done
Другие примечания:
Обратите внимание, что в приведенном выше примере я использовал имена переменных в нижнем регистре. Существует куча всех -имён заглавных букв со специальными значениями, и самый безопасный способ избежать конфликтов с ними — придерживаться нижних -или смешанных -переменных регистра (, если вы не хотите ] особое значение ).
Не перебирайте вывод ls
, просто используйте for i in *; do
. И дважды -цитируйте ссылку на $i
, чтобы в некоторых случаях избежать странного синтаксического анализа.
За исключением того, что вам не нужно этого делать, sed
может перебирать файлы самостоятельно, если вы используете sed -i "" 'whatever' *
.
В команде sed
похоже, что вы пытаетесь использовать подстановку переменных и двойные -кавычки внутри одинарных -строк в кавычках, и это не работает. Если вы не хотите, чтобы двойные -кавычки были буквально частью строк поиска/замены, используйте вместо этого:
sed -i "" "s/$set/$year/g" *
Если вам нужны буквальные двойные -кавычки при поиске и замене строк, экранируйте их:
sed -i "" "s/\"$set\"/\"$year\"/g" *
Похоже, вы планируете пройтись по файлу в цикле, и для каждой строки зациклиться на каждом файле, заменив одну эту строку. Почему бы не сделать за один прогон все замены? То есть вместо того, чтобы запускать sed
командой s/100/2007/g
, а затем снова командой s/FFF/1993/g
, а затем снова... почему бы не запустить ее только один раз командой s/100/2007/g; s/FFF/1993/g; s/7E7/1994/g;...
?
Вам нужно построить команду sed
в цикле, что-то вроде этого:
sedCommand=""
while read set year; do
sedCommand+="s/$set/$year/g; "
done
Наконец, меня беспокоят подобные глобальные замены. Вы уверены, что «100» не встречается ни в одном файле, кроме тех случаев, когда его следует заменить на «2007»? Включает ли это файл test.txt?
У вас есть резервная копия всех этих файлов?Вы действительно должны, прежде чем бросать что-то подобное на что-то, что вы не хотите потерять.
Вы можете попробовать использовать foremost
в системе unix. Он прочитает поток байтов ОС и попытается получить некоторые файлы на основе заголовка и магических чисел.
Вы можете попробовать эту команду:
foremost -i file240G.dump -o directory/