У меня есть каталог, который имеет 3 файла: a.txt b.txt c.txt Я должен удалить первые 4 строки из каждого файла, который я хочу использовать «sed» или «awk» или т.д. В Cygwin Я делаю это:

for x in `ls`; do
    sed '1,4d' $x
done

Это работает нормально, но мне нужно иметь вывод во вновь создаваемых файлах, например, a2.txt b2.txt c2.txt. Как я могу рефакторинг моей петли? Спасибо

2 ответа2

1
for x in *; do
    sed '1,4d' $x > $(basename $x .txt)2.txt
done

или же

for x in *; do
    sed '1,4d' $x > ${x/./2.}
done
0

Предположим, что вы используете bash в качестве оболочки в Cygwin (то есть по умолчанию), вы можете использовать функцию расширения параметров bash следующим образом:

for x in *.txt; do
    sed '1,4d' $x > ${x%.txt}2.txt
done

Ключом является $ {x% .txt}, чтобы удалить суффикс имени файла (.txt), затем добавьте "2" и «.txt» в качестве примера.

Существуют и другие способы рефакторинга: использование « ls » для получения списка файлов, подлежащих редактированию, является излишним, достаточно использовать расширение имени самой оболочки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .