Що таке команда 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' не друкує результати для stdout ... якщо я просто запускаю 'tail -f logfile | cut -c 5- 'я бачу результати ... проблема повинна бути з grep я використовую cygwin FYI спасибі
les2

що станеться, якщо не додати останню трубу і вирізати? в основному, якщо ви видалите останню частину рядка?
LB40

він "хвостить" файл журналу, фільтруючи його grep (тобто всі рядки з "org.springframework" надруковані в stdout), коли я додаю трубку до "cut" ... вона зависає ТАКІ, якщо я усуну 'grep' 'cut' працює належним чином ... я думаю, що щось не так у тому, як я використовую grep ... теж може бути
цигун

1
о, я бачу ... навіщо ти використовуєш хвіст? просто виконайте файл grep org.springframework | cut -c 5- але я думаю, що sed приємніше :-)
LB40

6
Проблема полягає в тому, що греп буферизує великі шматки, перш ніж надсилати їх на різання, оскільки він може бачити, що він не пише в термінал. Використовуйте grep --line-buffered "org.springframeworkдля вирішення цього питання.
Стівен Шютт

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

і ви заміняєте 5 на потрібне число ... це повинно зробити трюк ...

EDIT, якщо для кожного рядка 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-символ, перший mth символ відповідно.

Це виконає операцію з кожним рядком вхідного файлу.


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

Ось проста функція, перевірена на баш. 1-й параметр функції - рядок, 2-й парам - кількість символів, які слід позбавити

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

Використання: введіть тут опис зображення


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