удар находит строки, запускающиеся со строки

Попробуйте что-то вроде этого:

# exit on failure
set -e

package=php5-fpm
mkdir $package
cd $package

# you could also get the file from a package mirror if you have
#  an older version of apt-get that doesn't support 'download' 
#  or if you would like more control over what package version
#  you are downloading.
# (e.g. http://archive.ubuntu.com/ubuntu/pool/main/)
apt-get download $package

# deb package files are ar archives
ar vx ${package}*.deb
# containing some compressed tar archives
tar xzf data.tar.gz
# now you have the files

# you can get diffs for all of the files in etc if you would like
find etc -type f |
while read file ; do
    diff $file /$file
done

Как предложили другие, определенно подвергните свои конфигурационные файлы управлению версиями. Тем путем Вы видите точно, что Вы изменили и когда Вы изменили его.

10
25.03.2014, 17:32
6 ответов
[116193] С помощью [116737]pcregrep[116738]:[12176]POSIXly:[12177] (хотя это означает чтение всех файлов полностью с теми реализациями [116739]awk[116740], которые не поддерживают [116741]nextfile[116742]).[12178] С версиями GNU [116743]grep[116744] до 2.5. 4:[12179]кажется[116746] работает, но это случайно и не гарантированно.[12180]До исправления в 2.6 (этим коммитом [116747]grep[116748]) GNU [116749]grep[116750] упускал из виду, что функция поиска pcre, которую он использует, будет совпадать по всему буферу, обрабатываемому в настоящее время [116751]grep[116752], вызывая всевозможные неожиданности в поведении. Например:[12181]будет совпадать на файле, содержащем:[12182]Это будет совпадать:[12183]Но это:[12184]Или:[12185]не будет (так как [116753]1\n2\n[116754] находится на двух буферах, обрабатываемых [116755]grep[116756]). [12186] Это поведение в итоге было задокументировано:[12187]15- Как я могу сравнивать через линии?[12188]Стандартный grep не может этого сделать, так как в основном он основан на линиях. Следовательно, простое использование класса символов '[:пробел:]' не позволяет соответствуют новинкам так, как можно было бы ожидать. Однако, если ваш grep скомпилирован с включенным Perl шаблоном, модификатором Perl 's'. (что делает '.' соответствующими новым строкам) можно использовать:[12189]printf 'foo\nbar\n' | grep -P '(?s)foo.*?bar'. [12190] После того, как она была зафиксирована в пункте 2.6, в документацию не вносилось никаких изменений (однажды я сообщил об этом [116763] там [116764]).[116221].
5
27.01.2020, 20:02
[116177] С помощью [116713]awk[116714]:[12170] это выведет содержимое файла, если есть последовательные строки, начинающиеся с [116715]C[116716]. Выражение [116717](p ~ /^C/ && $1 ~ /^C/)[116718] просмотрит последовательные строки в файле и вычислит true, если первый символ в обеих строках совпадает с [116719]C[116720]. В этом случае строка будет распечатана. [12171] Для того, чтобы найти все файлы, в которых есть такой шаблон, можно запустить вышеуказанный awk с помощью команды [116721] find[116722]:[12172] В этой команде [116723] find[116724] + [116725] exec[116726] пройдет через каждый из файлов и выполнит аналогичную [116727]awk[116728] фильтрацию по каждому файлу и выведет его имя через [116729]FILENAME[116730], если выражение awk будет оценено как истинное. Чтобы избежать многократной печати [116731]FILENAME[116732] для одного файла с множественными совпадениями, используется оператор [116733] exit[116734] (спасибо @terdon). [116184]
2
27.01.2020, 20:02
[117231]Еще один вариант с GNU [117591]sed[117592]:

Для одного файла:

(хотя он также сообщит о файлах, которые не может прочитать).

Для [117593]find[117594]:

Проблемы с распечатыванием нечитаемых файлов можно избежать, если написать:

2
27.01.2020, 20:02
[116234]Если предположить, что ваши файлы достаточно малы для чтения в памяти:[12196]Пояснение:[12197]-[117043]000[117044] : установите [117045]\n\n[117046] в качестве разделителя записей, это включит режим абзацев, в котором абзацы (разделенные последовательными новыми строками) будут рассматриваться как одинарные строки. [12198]-ne[117048] : применить скрипт, заданный в качестве аргумента к [117049]-e[117050] каждой строке входного файла (входных файлов). [12199]$ARGV[117052] : обрабатываемый в настоящее время файл[12200]/^C[^\n]*\nC/[117128] : соответствие [117129]C[117130] в начале строки (см. описание модификаторов [117131]sm[117132] ниже, почему это работает здесь), за которым следуют 0 или более символов без строки, новая строка, а затем еще один C. Другими словами, найти последовательные строки, начинающиеся с [117133]C[117134]. *[117135]//sm[117136] : этими модификаторами соответствия являются (как документировано [здесь]):[12201]m[117148] : Обращайтесь к строке как к нескольким строкам. То есть, изменить "^" и "$" с соответствия начала или конца строки только на левый и правый конец строки на соответствие им в любом месте внутри строки.[12202]s[117150]: Трактовать строку как единственную строку. То есть, изменить "..." на соответствие любому символу, даже новой строке, которая обычно не совпадает. [12203] Вы также можете сделать что-нибудь некрасивое вроде:[12204] Здесь код [116775]perl[116776] заменяет новые строки на [116777]%%[116778], так что, предполагая, что у вас нет [116779]%%[116780] во входном файле (большой [116781], если[116782], конечно), grep [116783]grep[116784] будет совпадать с последовательными строками, начинающимися с [116785]C[116786].[116243].
1
27.01.2020, 20:02
[1171369]SOLUTION:

DEMO:

Сначала создадим тестовую базу:

В

pip install chardet

/tmp

файле1-26[1172064] создадим 26 файлов с именем

file1-26. [1171801] В каждом файле 27 или 28 строк, начинающихся с букв

a-z

, а за ними следуют остальные буквы алфавита. Каждый 3-й файл содержит две последовательные строки, в которых дублируется первый символ.

SAMPLE:

И когда я меняю:

на:

я получаю...

OUTPUT:

Итак, вкратце, решение работает следующим образом:

установить[1172106]s[1172068] положение подоболочки во всех ваших файлах, и для каждого

установить[1172108]s[1172070] вложенные положения подоболочки к первой букве каждой строки в каждом файле по мере его цикла.[1171807] [1171808] [1172071] [1172109][ тесты]

sudo checkinstall make install

, если

1

отрицает

2

  1. , указывая на совпадение, и если так
  2. echo
  3. имя файла, то
break[1172134]s[1172118] итерация текущего цикла

else

auto archive settings

shift[1172120]s[1172080] to the next single character position to try again

1
27.01.2020, 20:02
[117439] Этот сценарий использует [117827] grep[117828] и [117829] cut[117830] для получения номеров совпадающих строк и проверяет наличие любых двух последовательных номеров. Предполагается, что в качестве первого аргумента в сценарий передано действительное имя файла:

0
27.01.2020, 20:02

Теги

Похожие вопросы