2015-05-12 3 views
0

У меня есть конкретный файл (sample.txt) говорят, с содержанием:Совпадение несколько строк файла и заменить, если содержимое не соответствует

Doc=True  
Add=123.566.33.8  
This #is a sample File  
Use #for Certain specific functions  
Domain=443.59.43.23 

При выполнении определенной операции, содержание этого файла изменений:

Doc=True 
Add=123.566.33.8 
eshfsjfn 
sldfhsehfoewjwefn 
lsjdnfnfd 

Теперь мне нужно убедиться, что содержание всегда остается таким же, как в первом случае. Итак, я пытаюсь выполнить grep исходный шаблон (sample.txt) с помощью команды grep со всеми необходимыми строками, и если в случае, если строки не совпадают, то следует добавить эти строки в файл sample.txt. Содержимое в sample.txt всегда должно быть ограничено тем, что показано на начальном этапе. Я не хочу создавать другой файл с тем же содержимым, а затем сопоставлять его. Я хочу использовать grep, sed или, возможно, awk.

+0

первыми, пожалуйста. Вы сказали, что у вас есть «sample.txt», и он изменяет его содержимое. Вы также говорите, что не хотите создавать другой файл с тем же контентом. Тогда ... что вы хотите совместить? Если ваш файл изменил его содержание, ... с чем вы его совместите? Откуда пропали данные, которые вы потеряли? Может быть, вам нужно что-то, что будет проверять изменения? или вы имеете в виду что-то вроде 'diff sample.txt sample2txt' ??? –

+0

Я не хочу создавать другой файл с тем же содержимым, а затем сопоставлять его. <- какой файл или данные следует сравнивать тогда? –

+0

Я хочу использовать grep что-то вроде этого. задать расширенное "Doc = True | Добавить = 123.566.33.8 | Это #is образец файла | Использование некоторых конкретных # для функций | Domain = 443.59.43.23" sample.txt Я не хочу, чтобы этот оригинал кода в отдельном файле. Необходимо выполнить grep все исходные строки и проверить, не изменился ли файл после определенной операции. Если да, просто добавьте исходное содержимое обратно в этот файл. – newtocoding

ответ

0

я отправляю этот ответ если вы хотите sample.txt сверять вход Standar AWK файла

Надеетесь, что это может помочь вам

awk'BEGIN { 
    while (getline < "sample.txt") 
    { 
    a[$0] 
    } 
} 
{ 
    if($0 in a) 
    { 
     located=true; 
    } 
    if(!located) 
    { 
     print "Line changed ->"NR" ->"$0 
     print $0 >> "sample.txt" <-- Printing located line in sample.txt 
     located=false; 
    } 
}' file2.dat 
+0

Это сохранит файл в массив awk, индекс которого представляет собой целую строку ($ 0). Затем с' $ 0 in a' мы проверим, есть ли строка в массиве. И если его там нет, он будет напечатан как измененная строка. file2.dat может быть заменен трубой перед awk (например :) 'your_command.sh | awk '{[...]}' ' –

+0

Если вы хотите, чтобы эти строки записывались в« sample.txt », просто добавьте' >> "sample.txt" 'в команды печати в awk. Это добавит строки непосредственно в файл –

Смежные вопросы