Использование grep для печати номеров строк

Я хотел бы использовать команду grep, чтобы напечатать номер строки для строки, которую я ищу. Тем не менее, когда я использовал команду grep -n он печатает номер строки с двоеточием: рядом с ним. Есть ли способ, которым я могу использовать то же самое grep -n Команда для печати номера строки, за которой следует: двоеточие?

$ grep -n 'Captain' sometextfile.txt
3: Captain America

Я хотел бы вместо этого напечатать,

3 Captain America

(без ':')

Какие-либо предложения??

4 ответа

Решение

Ты можешь использовать sed вместе с grep для достижения этой цели.

grep -n 'Captain' sometextfile.txt | sed 's/:/ /'

Эта команда sed находит шаблон : и заменяет его (пространство).

Общий синтаксис - sed 's/find/replace/'

Этот метод заменит только первый случай : в каждой строке , Поэтому, даже если строка в текстовом файле содержит :, это останется неизменным.

Если вы просто хотите удалить двоеточие (а не заменить его пробелом), вы можете передать вывод вашего оператора grep через tr, Ваша команда будет что-то вроде:

grep -n 'Captain' sometextfile.txt | tr -d ':'

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

grep -n 'Captain' sometextfile.txt | tr ':' ' '

Хотя, как указывает Муру, это удалит все двоеточия в строке.

Можете ли вы попробовать, поможет ли вам эта команда

awk '/Captain America/ {printf "%s %s\n", NR, $0}'

Вот мои два цента по этому вопросу, используйте подфункцию awk:

grep -n 'Captain' file.txt | awk '{sub(":"," "); print }'

grep -n 'Captain' file | awk '{sub(":Captain"," Captain"); print }'

И вот разрез (который удаляет все следы : как в примере с dazzle)

grep -n 'Captain' file | cut -d":" -f1- --output-delimiter=" "

Другие вопросы по тегам