Я хочу напечатать строки, которые начинаются со второго столбца (первый столбец - это пробел).

$ cat test.txt

first
 second
  third
   four
 second
    five
      seven

Выход должен быть:

 second


 second

Когда строка начинается с 7-го столбца, вывод должен быть:

      seven

2 ответа2

2

Вы можете использовать ^\s\S регулярное выражение:

$ cat test.txt
first
 second
  third
   four
 second
    five
      seven
$ grep "^\s\S" test.txt
 second
 second
  • ^ означает "строка начинается с",
  • \s означает «первый символ - это пробел»,
  • \S для "следующий символ не является пробелом.

Таким образом, вы получите каждую строку, начинающуюся с одного пробела.

Если вы хотите, чтобы строки начинались с n пробелов, добавьте {n}:

$ grep "^\s\{1\}\S" test.txt
 second
 secon d
$ grep "^\s\{2\}\S" test.txt
  third
$ grep "^\s\{3\}\S" test.txt
   four
$ grep "^\s\{4\}\S" test.txt
    five
$ grep "^\s\{5\}\S" test.txt
$ grep "^\s\{6\}\S" test.txt
      seven
0

Действительно простое решение для второй версии:

 echo "first
 second
  third
   four
 second
    five
      seven" | grep -e '^ ' | grep -ve '^  '

[Редактировать] - теперь работает только с полями в начале строки

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .