Что такое команда unix для удаления первых N символов строки?


238

Например, я мог бы хотеть:

tail -f logfile | grep org.springframework | <command to remove first N characters>

Я думал, что trможет иметь возможность сделать это, но я не уверен.

Ответы:


355

Использование cut. Например. убрать первые 4 символа каждой строки (т.е. начать с 5-го символа):

tail -f logfile | grep org.springframework | cut -c 5-

1
есть ли у вас идеи, почему труба не работает? когда я по сути запускаю эту команду, 'cut' не выводит результаты в стандартный вывод ... если я просто запускаю 'tail -f logfile | cut -c 5- 'я могу видеть результаты ... проблема должна быть с grep, я использую cygwin FYI спасибо
les2

что будет, если не добавить последнюю трубу и не разрезать? в принципе, если убрать последнюю часть строки?
LB40

он «привязывает» лог-файл, фильтруя его с помощью grep (т.е. все строки с «org.springframework» в них выводятся на стандартный вывод), когда я добавляю канал в «cut» ... он зависает ОДНАКО, если я устраняю 'grep' 'cut' работает должным образом ... я думаю, что что-то не так с тем, как я использую grep ... тоже может быть cygwin
les2

1
о, я вижу ... почему ты используешь хвост? просто сделайте grep org.springframework logfile | cut -c 5- но я думаю, что sed лучше :-)
LB40

6
Проблема в том, что grep буферизует большие куски перед отправкой их на резку, потому что видит, что не пишет в терминал. Используйте, grep --line-buffered "org.springframeworkчтобы решить эту проблему.
Стин Шютт

48
sed 's/^.\{5\}//' logfile 

и вы замените 5 на число, которое вы хотите ... это должно сделать свое дело ...

РЕДАКТИРОВАТЬ, если для каждой строки sed 's/^.\{5\}//g' logfile


29

Вы можете использовать cut:

cut -c N- file.txt > new_file.txt

-c: персонажи

file.txt: входной файл

new_file.txt: выходной файл

N-: Символы от N до конца будут вырезаны и выведены в новый файл.

Также могут иметь другие аргументы, такие как: «N», «N-M», «-M», означающие n-й символ, с n-го по m-й символ, с первого по m-й символ соответственно.

Это выполнит операцию для каждой строки входного файла.


4
tail -f logfile | grep org.springframework | cut -c 900-

удалил первые 900 символов

cut использует 900-, чтобы показать 900-й символ до конца строки

однако, когда я передаю все это через grep, я ничего не получаю


4
«cut -c 1-900» не «удалит первые 900 символов» - он оставит только первые 900 символов. Если вы хотите удалить первые 900 символов, используйте «cut -c 901-»
iammichael

также это первые 900 символов в каждой строке, согласно ответу @ iammichael
Блэр Конрад

1
«cut -c 900-» удалит первые 899 символов, нет?
Yiding Zhou

4

Я думаю, awkчто будет лучшим инструментом для этого, так как он может фильтровать и выполнять необходимые функции манипуляции со строками на отфильтрованных строках:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}'

или

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)'

1

Вот простая функция, проверенная на bash. 1-й параметр функции - строка, 2-й параметр - количество символов, которые нужно удалить

function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

Использование: введите описание изображения здесь


2
Вы можете упростить это, чтобы повторить $ {1: $ 2}
kdubs
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.