что-то туплю вроде задача простая, если рассматривать как поля,но можно ли решить задачу автоматически текстовым редактором?
есть большой текстовый файл со строчками вида
слово1 слово2 слово3 итд
слово4 слово5 слово6 итд
нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой
думал банально заменить sed-ом,пробел на точку с запятой,но блин пробелов там много нужных
>есть большой текстовый файл со строчками вида
>слово1 слово2 слово3 итд
>слово4 слово5 слово6 итд
>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой$ sed 's|^\([^ ]\+ [^ ]\+\)\( .*\)$|\1;\2|' test.txt
слово1 слово2; слово3 итд
слово4 слово5; слово6 итд
>[оверквотинг удален]
>>>слово1 слово2 слово3 итд
>>>слово4 слово5 слово6 итд
>>>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой
>>
>>$ sed 's|^\([^ ]\+ [^ ]\+\)\( .*\)$|\1;\2|' test.txt
>>слово1 слово2; слово3 итд
>>слово4 слово5; слово6 итд
>
>товарисчи! асвойте уже перл - там такие весчи делать просто ВААХ КААК
>ХАРАШО!На Perl-е почти также:
$ perl -wpe 's|^([^\s]+ [^\s]+)( .*)$|$1;$2|' test.txt
слово1 слово2; слово3 итд
слово4 слово5; слово6 итдНо автор просил на sed/awk.
>[оверквотинг удален]
>>товарисчи! асвойте уже перл - там такие весчи делать просто ВААХ КААК
>>ХАРАШО!
>
>На Perl-е почти также:
>
>$ perl -wpe 's|^([^\s]+ [^\s]+)( .*)$|$1;$2|' test.txt
>слово1 слово2; слово3 итд
>слово4 слово5; слово6 итд
>
>Но автор просил на sed/awk.s/^(\s*\S+\s+\S+)(.*)$/$1;$2/
также можно поизвращатся с метой \b (граница слова), но я не помню как он робитЗЫ да можно и сидом, но сам сид пишется на перле двумя строчками цикла чтения с stdin + одна строчка на каждую нужную обработку.
я не отрицаю прелестей сид, но всетаки перлом тексты рулит удобнее, намного удобнее
>что-то туплю вроде задача простая, если рассматривать как поля,но можно ли решить
>задачу автоматически текстовым редактором?
>есть большой текстовый файл со строчками вида
>слово1 слово2 слово3 итд
>слово4 слово5 слово6 итд
>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой
>
>думал банально заменить sed-ом,пробел на точку с запятой,но блин пробелов там много
>нужныхcat /tmp/test
слово1 слово2 слово3 итд
слово4 слово5 слово6 итдPERL :
cat /tmp/test | perl -ne 'my($a,$b,$c) = split(/\s+/,$_); print "$a $b; $c\n"'
слово1 слово2; слово3
слово4 слово5; слово6AWK :
cat /tmp/test | awk '{$2 = $2";" ; print $0}'
слово1 слово2; слово3 итд
слово4 слово5; слово6 итд
FIXED:
perl -ne 'my($a,$b,@c) = split(/\s+/,$_); print "$a $b; @c\n"'
>FIXED:
>perl -ne 'my($a,$b,@c) = split(/\s+/,$_); print "$a $b; @c\n"'На опене народ любит меряться пиписьками. Правда айтишнегов отличает тот факт, что лучшей длинной считается наименьшая, да и внешний вид не на последнем месте. Высшим же достижение считается завязать в узел так, что бы никто не понял как ))
>Высшим же достижение считается завязать в узел так, что бы
>никто не понял как ))ИМХО я не считаю что примерно сложный для понимания ;)
всего 2 действия
1. режиться на три части с помощью split'a (слово,слово и все остальное)
2. выводиться все с ';' :)все просто :)
>>Высшим же достижение считается завязать в узел так, что бы
>>никто не понял как ))
>
>ИМХО я не считаю что примерно сложный для понимания ;)
>всего 2 действия
>1. режиться на три части с помощью split'a (слово,слово и все остальное)
>
>2. выводиться все с ';' :)
>
>все просто :)ненене, я не в коем разе не утверждаю что тут есть чтото сложно ))
все понятно и прозрачноя собстна про "померятся лубят" ))
>| awk '{$2 = $2";" ; print $0}'Упс, сорри. Поторопился, не дочитал.
>есть большой текстовый файл со строчками вида
>слово1 слово2 слово3 итд
>слово4 слово5 слово6 итд
>нужно после второго слова на каждой строчке(слова разные) вставить точку с запятой|awk '{$2=$2";";print}'
:) И нет перлом не проще -- его _учить надо, а он _стра-а-ашный_! :-P
>:) И нет перлом не проще -- его _учить надо, а он
>_стра-а-ашный_! :-PСтраааашна, аж жуть! (С)
Вот вам hand-made sed :)
Мож кто еще не знает:#! /usr/bin/perl -w
#usage: ./script < scr_file > dst_file
while ($from_stdin_string = <>) {
#some_regex with $from_stdin_string;
#some_regex with $from_stdin_string;
#some_regex with $from_stdin_string;
...
}
интересная статья о разных алгоритмах использующихся для обработки регулярных выражений.
http://swtch.com/~rsc/regexp/regexp1.html