2013-12-19 2 views
0

Я хотел бы искать все .java-файлы, которые имеют escape-последовательность новой строки \n (обратная косая черта, за которой следует 'n') в файлах.с помощью команды find в unix для поиска новой строки

Я использую эту команду:

find . –name "*.java" –print | xargs grep “\n” 

но результат показывает все строки в файлах .java, имеющих букву п. Я хочу найти новую строку \n.

Можете ли вы предложить решение?

Пример:

x.java 
method abc{ 
String msg="\n Action not allowed.";} 

y. java 
method getMsg(){ 
String errMsg = "\n get is not allowed.";} 

Я хочу найти все * .java файлы, имеющие эти типы строк, определенных с последовательностью новой строки побега.

+0

'\ n' - это символ новой строки; '\ r' - возврат каретки. Что вы после? –

+0

sry я ошибся, я ищу новую строку \ n –

+0

В системах Unix каждая строка в каждом файле заканчивается символом новой строки, по определению. Строка - это последовательность символов, заканчивающихся символом новой строки. Даже в двоичном файле (файл .class или файл объекта) строки интерпретируются как последовательность символов до следующего символа новой строки (даже если всего миллионы символов, включая нулевые или нулевые байты). –

ответ

1

Похоже, вы хотите найти строки, содержащие 2-символьную последовательность \n. Для этого используйте grep -F, который рассматривает шаблон как фиксированную строку, а не как регулярное выражение или escape-последовательность.

find . –name "*.java" –print | xargs grep -F "\n" 
+0

Thnx это сработало –

0

Этот -P grep будет соответствовать символу новой строки. используя '$'. Поскольку каждая строка в моем файле содержит новую строку, она будет соответствовать каждой строке.

grep -P '$' 1.c 

Я не знаю, почему вы хотите совместить символ новой строки в файлах. Это странно.

+0

У меня есть много строковых сообщений, определенных как «\ n xxx» во многих .java-файлах.Эти сообщения будут отображаться во время исключений. Я хочу найти все строковые сообщения, которые определены начиная с \ n –

+0

@sailajakasanur. Затем вы должны указать нам пример строки, которую вы хотите сопоставить. Если ваш символ новой строки написан в «\ n». Вы можете использовать grep -P "\\\ n" например: echo "\ n xxx" | grep -o -P "\\\ n" для соответствия "\ n". извините, я не использую tcsh, не знаю, поддерживает ли он регулярное выражение perl. – oyss

0

Я считаю, что вы ищете это:

find . –name "*.java" –exec grep -H '"[^"]*\n' {} \; 

Флаг -H, чтобы показать имя файла, когда был матч шаблон. Если это не работает для вас:

find . –name "*.java" –print0 | xargs -0 grep '"[^"]*\n' 

Если xargs -0 не работает для вас:

find . –name "*.java" –print | xargs grep '"[^"]*\n' 

Если grep не работает для вас:

find . –name "*.java" –print | xargs egrep '"[^"]*\n' 

мне нужен эта последняя версия в Solaris, в современных системах первая должна работать.

Наконец, не уверен, что шаблон охватывает все ваши угловые шкафы.

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