Объясненная инструкция оболочки - PullRequest
1 голос
/ 16 февраля 2011

Следующий оператор удалит номера строк в текстовом файле:

cat withLineNumbers.txt | sed 's/^.......//' >> withoutLineNumbers.txt

Входной файл создан со следующим оператором (этот я понимаю):

nl -ba input.txt >> withLineNumbers.txt

IЯ знаю функциональность cat, и я знаю, что вывод записывается в файл'lessLineNumbers.txt '.Но часть '| sed 's/^.......//'' мне не совсем понятна.

Спасибо за ваше время.

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

Это регулярное выражение sed просто удаляет первые 7 символов из каждой строки.Регулярное выражение ^....... говорит: «Любые 7 символов в начале строки».Аргумент sed s/^.......// заменяет указанное выше регулярное выражение пустой строкой.

Для получения дополнительной информации см. Справочную страницу sed(1).

0 голосов
/ 16 февраля 2011

в этом выражении sed говорится об удалении первых 7 символов.точка "."означает любой персонаж.Есть еще более простой способ сделать это

 awk  '{print $2}' withLineNumbers.txt

, вам просто нужно распечатать второй столбец, используя awk.Нет необходимости использовать регулярное выражение

, если в ваших данных есть пробелы,

awk  '{$1="";print substr($0,2)}' withLineNumbers.txt
0 голосов
/ 16 февраля 2011

sed выполняет поиск и замену. 'S' означает поиск, следующий символ ('/') - это разделитель, выражение поиска - '^ .......', а выражение замены - пустая строка (т. Е. Все между двумя последними косыми чертами ).

Поиск является регулярным выражением. «^» Означает начало совпадения строки. Каждый "." значит соответствует любому персонажу. Таким образом, поисковое выражение соответствует первым 7 символам в каждой строке. Затем он заменяется пустой строкой. Итак, что делает sed - это удаление первых 7 символов в каждой строке.

Более простым способом достижения той же мысли может быть:

cut -b8- withLineNumbers.txt > withoutLineNumbers.txt
...