Bash-скрипт для редактирования группы файлов

StackOverflow https://stackoverflow.com/questions/1630878

  •  06-07-2019
  •  | 
  •  

Вопрос

Чтобы обработать кучу данных и подготовить их к вставке в нашу базу данных, мы генерируем несколько сценариев оболочки.Каждый из них имеет около 15 строк, по одной для каждой таблицы, в которую передаются данные.В одном из недавних пакетов импорта некоторые файлы импорта не смогли попасть в одну конкретную таблицу.Итак, у меня есть куча шелл-скриптов (около 600), в которых мне нужно закомментировать первые 7 строк, а затем перезапустить файл.В этой папке находится около 6000 сценариев оболочки, и ничто о конкретном файле не может сказать мне, нуждается ли он в редактировании.У меня есть список файлов, которые я извлек из выходных данных базы данных.

Итак, как мне написать сценарий bash (или что-нибудь еще, что будет работать лучше), чтобы взять этот список имен файлов и для каждого из них закомментировать первые 7 строк и запустить сценарий?

РЕДАКТИРОВАТЬ:

#!/usr/bin/env sh

cmd1
cmd2
cmd3
cmd4
cmd5
cmd6
cmd7
cmd8

Не уверен, насколько это читабельно.По сути, к первым 7 строкам (не считая первой строки) необходимо добавить # в начало.Примечание:файлы были отредактированы, чтобы сделать каждую строку короче и частично исключить копирование из VIM.Но в основной части каждого файла есть строка, начинающаяся с echo, а затем строка, начинающаяся с sqlldr.

Это было полезно?

Решение

Используя sed, вы можете указать диапазон номеров строк в файле, который нужно изменить.

#!/bin/bash

while read line
do
    # add a comment to beginning of lines 1 - 7 and rename the script
    sed '3,9 s/^/#/' $line > $line.new
    exec $line.new
done < "filelist.txt"

Возможно, вы захотите проверить это, прежде чем запускать все эти сценарии...

РЕДАКТИРОВАТЬ:изменил номера строк, чтобы отразить комментарии.

Другие советы

Грубо говоря:

#!/bin/sh
for file in "$@"
do
    out=/tmp/$file.$$
    sed '2,8s/^/#/' < $file > $out
    $SHELL $out
    rm -f $out
done

Предполагая, что вас не волнует проверка условий гонки и т. д.

ex кажется созданным для того, чем ты хочешь заниматься.

Например, для редактирования одного файла с документом здесь:

#!/bin/sh

ex test.txt << END
1,12s/^/#/
wq
END

Это закомментирует первые 12 строк в «test.txt».Для вашего примера вы можете попробовать "$FILE" или подобное (включая кавычки!).

Затем запустите их обычным способом, т.е. ./"$FILE"

редактировать: $SHELL "$FILE" вероятно, это лучший подход для их запуска (от одного из комментаторов выше).

В конечном итоге вам понадобится использовать команду Linux sed.Какую бы логику вам ни пришлось поместить в сценарий, вы знаете.Но ваш сценарий в конечном итоге вызовет sed. http://lowfatlinux.com/linux-sed.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top