Перенаправление вывода цикла 'for' В cygwin

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

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

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

6
задан susik
10.11.2022 5:54 Количество просмотров материала 3546
Распечатать страницу

2 ответа

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

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

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

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

0
отвечен Yingyu YOU 2022-11-11 13:42
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
1
отвечен Michael Vehrs 2022-11-11 15:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх