У меня есть каталог с текстовыми файлами с разделителями табуляции, а некоторые содержат комментарии в первых нескольких строках, которые я хотел бы удалить. Я знаю, что первая хорошая строка начинается с "Mark", поэтому я могу использовать /^Mark/,$!d
удалять эти комментарии. После этого у меня есть несколько других замен, которые я делаю в (новой) первой строке, которая имеет имена переменных.
Мой вопрос: почему я должен сохранить вывод sed
, чтобы мой скрипт работал? Я понимаю, что если моя строка будет удалена, то вывод не будет продолжаться вниз, потому что нет вывода. Но если я не удаляю (то есть !d
) тогда зачем мне сохранять в файл? Спасибо!
Вот мой сценарий оболочки. (Я sed
новичок, так что любая другая обратная связь также оценена.)
#!/bin/bash
for file in *.txt; do
mv $file $file.old1
sed -e '/^Mark/,$!d' $file.old1 > $file.old2
sed -e '1s/\([Ss]\)hareholder/\1hrhldr/g'\
-e '1s/\([Ii]\)mmediate/\1mmdt/g'\
-e '1s/\([Nn]\)umber/\1o/g'\
-e '1s/\([Cc]\)ompany/\1o/g'\
-e '1s/\([Ii]\)nformation/\1nfo/g'\
-e '1s/\([Pp]\)ercentage/\1ct/g'\
-e '1s/\([Dd]\)omestic/\1om/g'\
-e '1s/\([Gg]\)lobal/\1lbl/g'\
-e '1s/\([Cc]\)ountry/\1ntry/g'\
-e '1s/\([Ss]\)ource/\1rc/g'\
-e '1s/\([Oo]\)wnership/\1wnrshp/g'\
-e '1s/\([Uu]\)ltimate/\1ltmt/g'\
-e '1s/\([Ii]\)ncorporation/\1ncorp/g'\
-e '1s/\([Tt]\)otal/\1ot/g'\
-e '1s/\([Dd]\)irect/\1ir/g'\
$file.old2 > $file
rm -f $file.old*
done