Как удалить из всех файлов в папке строки с определенной строкой - PullRequest
0 голосов
/ 31 октября 2019

Я ищу способ удалить все строки из файла (для всех файлов в папке) со строкой #, а также скопировать имя файла и добавить его в качестве первого столбца (или последнего столбца):

в качестве примера у меня есть:

# DX 
# DEPTH 
MD   DX  DY
100  23  35
100  23  35

вывод должен быть таким, скажем, имя файла test2:

test2 MD   DX  DY
test2 100  23  35
test2 100  23  35

спасибо, S

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Используя простые структуры bash, перебирайте каждую строку каждого файла, сохраняйте строку и имя файла как переменные, затем для каждой строки в файле печатайте обе переменные вместе.

for file in *; do
  for (( i = 1 ; i <= $( grep "" -c $file ) ; i++ ); do
    line=$( cat $file | head -n ${i} | tail -1 )
    echo "${file} ${line}"
  done
done
0 голосов
/ 31 октября 2019

Рассматривая использование find / sed для построения командной строки для каждого процесса.

find * -type f | xargs -I@ sed -e '/#/d' -e 's/^/@ /' @

Выше будет напечатан комбинированный вывод. Если вам нужно изменить файлы, попробуйте использовать встроенное редактирование (sed -i)

find * -type f | xargs -I@ sed -i -e '/#/d' -e 's/^/@ /' @
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...