Вот сценарий AWK, который переносит длинные линии и повторно переносит остатки, а также короткие строки:
awk -v WIDTH=72 '
{
gsub("\t"," ")
$0 = line $0
while (length <= WIDTH) {
line = $0
more = getline
gsub("\t"," ")
if (more)
$0 = line " " $0
else
$0 = line
break
}
while (length >= WIDTH) {
print substr($0,1,WIDTH)
$0 = substr($0,WIDTH+1)
}
line = $0 " "
}
END {
print
}
'
Существует сценарий Perl, доступный на CPAN, который делает очень хорошее задание переформатирования текста. Это назвало paradj (отдельные файлы). Чтобы сделать расстановку переносов, Вам также будет нужно TeX::Hyphen
.
SWITCHES
--------
The available switches are:
--width=n (or -w=n or -w n)
Line width is n chars long
--left (or -l)
Output is left-justified (default)
--right (or -r)
Output is right-justified
--centered (or -c)
Output is centered
--both (or -b)
Output is both left- and right-justified
--indent=n (or -i=n or -i n)
Leave n spaces for initial indention (defaults to 0)
--newline (or -n)
Insert blank lines between paragraphs
--hyphenate (or -h)
Hyphenate word that doesn't fit on a line
Вот разность некоторых изменений, которые я внес для поддержки опции левого поля:
12c12
< my ($indent, $newline);
---
> my ($indent, $margin, $newline);
15a16
> "margin:i" => \$margin,
21a23
> $margin = 0 if (!$margin);
149a152
> print " " x $margin;
187a191,193
> print "--margin=n (or -m=n or -m n) Add a left margin of n ";
> print "spaces\n";
> print " (defaults to 0)\n";
У Вас почти был он. $argv является массивом, подобным жемчугу. $argv [0] является самим сценарием, как 0$ в оболочке или $ARGV [0] в жемчуге. $argv [1] был бы первым аргументом, переданным сценарию, но Ваше использование, вероятно, изменится, так как можно сделать кошку в сценарии PHP. Принятие Вашего сценария PHP stconvert
, использование теперь было бы stconvert simplifiedstory > traditionalstory
.
#!/usr/bin/php
<?php
define("MEDIAWIKI_PATH", "/home/a1/mediawiki-1.13.0/");
require_once "mediawiki-zhconverter.inc.php";
$text = shell_exec("cat $argv[1]");
echo MediaWikiZhConverter::convert($text, "zh-tw") , ",";
?>
echo str_replace('foo', 'bar', file_get_contents('php://stdin');
заменил бы всеfoo
сbar
в переданном по каналу входе. Если Вы хотите дескриптор файла, использоватьSTDIN
. Например, при передаче по каналу файла CSV:while (($record = fgetcsv(STDIN))) { print_r($record); }
. – janmoesen 03.11.2011, 21:37