Соответствуйте любому символу (включая новые строки) в sed

Если Вы скажете в JavaScript,

var thedate = new Date(1224043200000);
alert(thedate);

Вы будете видеть, что это - корректная дата, и можно использовать это где угодно в коде JavaScript с любой платформой.

8
задан Benjamin W. 6 March 2016 в 00:56
поделиться

5 ответов

sed перебирает входной файл построчно, что означает, как я понимаю, то, что вы хотите, невозможно в sed .

Вы можете использовать следующий сценарий Perl ( непроверенный ), хотя:

#!/usr/bin/perl

use strict;
use warnings;

{
    local $/; # slurp mode
    my $html = <>;
    $html =~ s/ style='[^']*'//g;
    print $html;
}

__END__

Один лайнер будет:

$ perl -e 'local $/; $_ = <>; s/ style=\047[^\047]*\047//g; print' fileA > fileB
3
ответ дан 5 December 2019 в 17:39
поделиться

Вы можете удалить все CR / LF с помощью tr , запустить sed , а затем импортировать в редактор, который автоматически форматирует.

1
ответ дан 5 December 2019 в 17:39
поделиться

Sed считывает входные данные построчно, поэтому выполнить обработку по одной строке непросто ... но это тоже возможно, вам нужно использовать ветвление sed. Следующее будет работать, я прокомментировал это, чтобы объяснить, что происходит (не самый читаемый синтаксис!):

sed "# if the line matches 'style='', then branch to label, 
     # otherwise process next line
     /style='/b style
     b
     # the line contains 'style', try to do a replace
     : style
     s/ style='[^']*'//
     # if the replace worked, then process next line
     t
     # otherwise append the next line to the pattern space and try again.
     N
     b style
 " fileA > fileB
4
ответ дан 5 December 2019 в 17:39
поделиться

Вы можете попробовать следующее:

awk '/style/&&/exampleValue/{
    gsub(/style.*exampleValue\047/,"")
}
/style/&&!/exampleValue/{     
    gsub(/style.* /,"")
    f=1        
}
f &&/exampleValue/{  
  gsub(/.*exampleValue\047 /,"")
  f=0
}
1
' file

Вывод:

# more file
this is a line
    style='text-align:center; color:blue; exampleStyle:exampleValue'
this is a line
blah
blah
style='text-align:center; color:blue;
exampleStyle:exampleValue' blah blah....

# ./test.sh
this is a line

this is a line
blah
blah
blah blah....
1
ответ дан 5 December 2019 в 17:39
поделиться

Другой способ выглядит так:

$ cat toreplace.txt 
I want to make \
this into one line

I also want to \
merge this line

$ sed -e 'N;N;s/\\\n//g;P;D;' toreplace.txt 

Вывод:

I want to make this into one line

I also want to merge this line

N загружает другую строку, P печатает пространство шаблона до первая новая строка, а D удаляет пространство шаблонов до первой новой строки.

1
ответ дан 5 December 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: