Вместо того, чтобы настраивать приложения для предотвращения синий на черном я рекомендую настроить терминал для создания синего более видимым. Большинство эмуляторов терминала имеет установку для этого. В xterm существует X ресурсов:
XTerm.VT100.color4: CornflowerBlue
В других эмуляторах терминала посмотрите в конфигурационном файле или диалоговом окне для настроек цветов или тем.
Существует последовательность общего контроля для установки оттенка, связанного с номером цвета из приложения: OSC 4 ; c ; spec BEL
где OSC
ESC ]
, c
номер цвета и spec
цветная спецификация, такая как #RGB.
printf %b '\e]4;4;#6495ed\a' # set the blue shade to CornflowerBlue
Изменение приложением является только эффективным до следующего терминального сброса. Если Вы используете этот метод (только рекомендовал, если Ваш терминал испытывает недостаток в механизме конфигурации), чтобы делать изменение эффективно персистентным, добавить escape-последовательность настройки цветов к строке сброса Вашего терминала (termcap: r1
строка; terminfo: rs1
строка).
См. также Переопределение оттенка отображенного цвета, я могу выбрать терминальные цвета своей локальной машины для использования тех из машины I ssh в?.
Это было бы csplit
за исключением того, что regex должен быть одной строкой. Это также делает sed
трудный; я пошел бы с Perl или Python.
Вы видели если
csplit foo.txt '/^[0-9][0-9]*\.$/' '{64}'
достаточно хорошо в Ваших целях. (csplit
требует BRE POSIX, таким образом, он не может использовать \d
или +
, среди других.)
С GNU coreutils, можно использовать csplit
повредить файл в regexp-разграниченные части, как показано geekosaur.
Вот портативный awk сценарий для разламывания файла на кусочки. Это работает
getline
иметь дело с многострочным разделителем (с 2 строками);outfile
к названию файла для печати к, когда с заголовком раздела встречаются.BEGIN {outfile="header.txt"}
{
while (/^[0-9]+\.$/) {
prev = $0; getline;
if ($0 == "") outfile = prev "txt";
print prev >outfile
}
print >outfile
}
nunber.
сопровождается текстом, которые содержат наклонную черту /
. Я вполне уверен two newlines
упомянутые ixtmixilix являются 2 пустыми строками, которые предшествуют числовому идентификатору и более конкретно определили бы заголовок, но поскольку данные по веб-странице только соответствуют /^[0-9]+\.
в заголовках раздела нет никакой потребности обслужить их (в данном случае).спасибо; специально для введения к getline
.. PS. может, в то время как быть то, если?
– Peter.O
27.06.2011, 16:58
while
есть ли в случае, если вход содержит 1.\n2.\n\n
(где \n
новые строки): 2.
должен быть распознан в строке заголовка. Это не собирается происходить здесь, но я поддерживаю его в своем коде, чтобы сделать его более общим (и соответствовать спецификации в вопросе более строго).
– Gilles 'SO- stop being evil'
27.06.2011, 17:20
Я думаю, что лучший способ — awk
и gawk
.
awk -F "([.] )|( / )" '/^[0-9]{1,3}[.]/{x="F"$1"("$2").txt";}{print >x;}' I_Ching_Wilhelm_Translation.txt
-F
укажет разделитель полей для каждой строки. Это регулярное выражение, здесь мы используем несколько разделителей:". "
и " / "
. Таким образом, строка вида 1. Ch'ien / The Creative
будет разбита на 3 поля:1
Ch'ien
и The Creative
. Позже мы можем ссылаться на эти поля с помощью $n
. $0
— вся строка.
Затем мы говорим awk сопоставлять строки с шаблоном ^[0-9]{1,3}[.]
Если совпадение есть, мы присваиваем значение x
. Значение x будет использоваться в качестве имени файла для операции print
. В этом примере мы используем "F"$1"("$2").txt"
, поэтому строка 1. Ch'ien / The Creative
дает имя файлаF1(Ch'ien).txt
В gawk мы также можем получить доступ к захваченной группе. Таким образом, мы можем упростить команду до :
gawk 'match($0, /^([0-9]{1,3})[.] (.*) \/ (.*)$/, ary){x="F"ary[1]"("ary[2]")";}{print >x;}' I_Ching_Wilhelm_Translation.txt
здесь мы используем match
захват групп и помещение их в список переменных ary
. $0
— вся строка. ary[0]
все совпало. ary[1...n]
— каждая группа.
Мы также можем сделать это с помощью perl :
perl -ne 'if(/^([0-9]{1,3})[.] (.*) \/ (.*)$/) {close F; open F, ">", sprintf("F$1($2).txt");} print F' I_Ching_Wilhelm_Translation.txt
Результаты :
> ls F*
F10(Lü).txt F22(Pi).txt F34(Ta Chuang).txt F46(Shêng).txt F58(Tui).txt
F11(T'ai).txt F23(Po).txt F35(Chin).txt F47(K'un).txt F59(Huan).txt
F12(P'i).txt F24(Fu).txt F36(Ming I).txt F48(Ching).txt F5(Hsü).txt
F13(T'ung Jên).txt F25(Wu Wang).txt F37(Chia Jên).txt F49(Ko).txt F60(Chieh).txt
F14(Ta Yu).txt F26(Ta Ch'u).txt F38(K'uei).txt F4(Mêng).txt F61(Chung Fu).txt
F15(Ch'ien).txt F27(I).txt F39(Chien).txt F50(Ting).txt F62(Hsiao Kuo).txt
F16(Yü).txt F28(Ta Kuo).txt F3(Chun).txt F51(Chên).txt F63(Chi Chi).txt
F17(Sui).txt F29(K'an).txt F40(Hsieh).txt F52(Kên).txt F64(Wei Chi).txt
F18(Ku).txt F2(K'un).txt F41(Sun).txt F53(Chien).txt F6(Sung).txt
F19(Lin).txt F30(Li).txt F42(I).txt F54(Kuei Mei).txt F7(Shih).txt
F1(Ch'ien).txt F31(Hsien).txt F43(Kuai).txt F55(Fêng).txt F8(Pi).txt
F20(Kuan).txt F32(Hêng).txt F44(Kou).txt F56(Lü).txt F9(Hsiao Ch'u).txt
F21(Shih Ho).txt F33(TUN).txt F45(Ts'ui).txt F57(Sun).txt
curl http://www2.unipr.it/~deyoung/I_Ching_Wilhelm_Translation.html|html2text -o I_Ching_Wilhelm_Translation.plain
sed 's|^[[:blank:]]*||g' I_Ching_Wilhelm_Translation.plain > I_Ching_Wilhelm_Translation.txt
'\.'
не будет работать также? – Vanuan 03.02.2016, 12:18