#linux #bash #awk #sed
#linux #bash #awk #sed
Вопрос:
Мне нужно удалить пробелы из начала строки, но только 1/2, например:
<div class="section" id="contact">
<div class="container">
<div class="col-md-12">
<h4>04</h4>
Для
<div class="section" id="contact">
<div class="container">
<div class="col-md-12">
<h4>04</h4>
и т.д.
Заранее спасибо за любое предложение.
Комментарии:
1. Только что удалил все пробелы, но я не знаю, как установить его для half: sed -e ‘s/^[ t] *//’
2. Что вы думаете и что вы пробовали? совет: замените два места одним местом…
3. Что вы на самом деле пытаетесь сделать? Красиво распечатать html-файл?
4. Да, мне нужно указать 2 пробела вместо 4 для каждой строки (например, когда у меня 8 пробелов, мне нужно 4, когда у меня 12 пробелов, мне нужно 6 и т.д. Красиво напечатанный html.
5. Я бы использовал такой инструмент, как Tidy , для красивой печати HTML.
Ответ №1:
использование group в sed
sed 's/^([[:blank:]]{1,})1/1/' YourFile
вы можете использовать пробел вместо [[:blank:]]
, если вы уверены, что это пробел, а не табуляция.
это так: замените группу пробелов на эту группу, если она появляется дважды в начале, так что это половина полной группы пробелов
Комментарии:
1. Это создает нежелательные отступы для меня, если он смешивает табуляции и пробелы.
2. это уже так, потому что отступ с табуляцией зависит от настроек редактора. Если необходимо (в запросе это не так). Он должен определить эквивалентность табуляции и способ ее замены (например: 3 пробела табуляция 5 пробелов = ?)
3. Спасибо, это именно то, что мне нужно! Там только пробелы, никаких табуляций, так что все работает хорошо.
4. Если есть сочетание пробелов / табуляций, то сначала следует пропустить исходный файл
expand
.5. Я бы предложил изменить
*
на, чтобы для строк без начальных пробелов sed не приходилось заменять начальную пустую строку пустой строкой.
Ответ №2:
Вы можете попробовать Perl
perl -pe 's!(^s )!$x=length($1)/2;" " x $x!sme ' input_file
с вашими заданными входными данными
$ cat stanislav.txt
<div class="section" id="contact">
<div class="container">
<div class="col-md-12">
<h4>04</h4>
$ perl -pe 's!(^s )!$x=length($1)/2;" " x $x!sme ' stanislav.txt
<div class="section" id="contact">
<div class="container">
<div class="col-md-12">
<h4>04</h4>
$
Ответ №3:
Предполагая, что все ваши начальные пробелы являются пустыми символами:
$ awk 'match($0,/^ */){$0=sprintf("%*s%s", int(RLENGTH/2), "", substr($0,RLENGTH 1))} 1' file
<div class="section" id="contact">
<div class="container">
<div class="col-md-12">
<h4>04</h4>
Если нет, то сначала запустите свой файл через pr -e -t
, чтобы сделать это так.