Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中将逗号分隔的数据包装为固定的行长度_Bash_Word Wrap - Fatal编程技术网

在bash中将逗号分隔的数据包装为固定的行长度

在bash中将逗号分隔的数据包装为固定的行长度,bash,word-wrap,Bash,Word Wrap,您好,我想包装以下逗号分隔的数据: -X, run, abs, absolute, accept, accept, alarm, schedule, atan2, arctangent, bind, binds, binmode, prepare, bless, create, caller, get, chdir, change, chmod, changes, chomp, remove, chop, remove, chown, change, chr, get, chroot, make

您好,我想包装以下逗号分隔的数据:

-X, run, abs, absolute, accept, accept, alarm, schedule, atan2, arctangent, bind, binds, binmode, prepare, bless, create, caller, get, chdir, change, chmod, changes, chomp, remove, chop, remove, chown, change, chr, get, chroot, make, close, close, closedir, close, connect, connect, continue, optional, cos, cosine, crypt, one-way, dbmclose, breaks, dbmopen, create, defined, test, delete, deletes, die, raise, do, turn, dump, create, each, retrieve, endgrent, be, endhostent, be, endnetent, be, endprotoent, be, endpwent, be, endservent, be, eof, test, eval, catch, exec, abandon, exists, test, exit, terminate, exp, raise, fcntl, file, fileno, return, flock, lock, fork, create, format, declare, formline, internal, getc, get, getgrent, get, getgrgid, get, getgrnam, get, gethostbyaddr, get, gethostbyname, get, gethostent, get, getlogin, return, getnetbyaddr, get, getnetbyname, get, getnetent, get, getpeername, find, getpgrp, get, getppid, get, getpriority, get, getprotobyname, get, getprotobynumber, get, getprotoent, get, getpwent, get, getpwnam, get, getpwuid, get, getservbyname, get, getservbyport, get, getservent, get, getsockname, retrieve, getsockopt, get, glob, expand, gmtime, convert, goto, create, grep, locate, hex, convert, import, patch, int, get, ioctl, system-dependent, join, join, keys, retrieve, kill, send, last, exit, lc, return, lcfirst, return, length, return, link, create, listen, register, local, create, localtime, convert, log, retrieve, lstat, stat, m//, match, map, apply, mkdir, create, msgctl, SysV, msgget, get, msgrcv, receive, msgsnd, send, my, declare, next, iterate, no, unimport, oct, convert, open, open, opendir, open, ord, find, pack, convert, package, declare, pipe, open, pop, remove, pos, find, print, output, printf, output, prototype, get, push, append, q/STRING/, singly, qq/STRING/, doubly, quotemeta, quote, qw/STRING/, quote, qx/STRING/, backquote, rand, retrieve, read, fixed-length, readdir, get, readlink, determine, recv, receive, redo, start, ref, find, rename, change, require, load, reset, clear, return, get, reverse, flip, rewinddir, reset, rindex, right-to-left, rmdir, remove, s///, replace, scalar, force, seek, reposition, seekdir, reposition, select, reset, semctl, SysV, semget, get, semop, SysV, send, send, setgrent, prepare, sethostent, prepare, setnetent, prepare, setpgrp, set, setpriority, set, setprotoent, prepare, setpwent, prepare, setservent, prepare, setsockopt, set, shift, remove, shmctl, SysV, shmget, get, shmread, read, shmwrite, write, shutdown, close, sin, return, sleep, block, socket, create, socketpair, create, sort, sort, splice, add, split, split, sprintf, formatted, sqrt, square, srand, seed, stat, get, study, optimize, sub, declare, substr, get, symlink, create, syscall, execute, sysread, fixed-length, system, run, syswrite, fixed-length, tell, get, telldir, get, tie, bind, time, return, times, return, tr///, transliterate, truncate, shorten, uc, return, ucfirst, return, umask, set, undef, remove, unlink, remove, unpack, convert, unshift, prepend, untie, break, use, load, utime, set, values, return, vec, test, wait, wait, waitpid, wait, wantarray, get, warn, print, write, print, y///, transliterate,
这样,在70个字符行长度之前的最后一个逗号处添加换行符。更可取的是,这可以在某种形式的bash-one-liner中完成

echo 'your, text, here' | fold -sw 70
这将为您提供所需的输出。您可以从文件或从其他任何地方获取echo,也可以直接使用fold命令并将其粘贴到stdin上,而不是使用echo

折叠中的“-w 70”告诉它在每行70个字符后换行,而-s告诉它在每个逗号后换行。

针对您关于逗号之间可能嵌入空格的情况:

我认为您使用
sed
是正确的。您可以选择将所有空格映射到某个未使用的字符,然后将逗号映射到空格,
折叠
,然后还原原始映射。但我认为这会给你留下一些奇怪的东西,比如以空格开头的线条

因此,您似乎只想将任何不带逗号的空格重新映射到文本中不存在的字符或序列,然后反转以将其切换回原处

比如说,

echo "$blahblah" | sed 's/\([^,]\) /\1\t/g' | fold -s | sed 's/\t/ /g
如果文本中没有制表符,并且没有连续的嵌入空格,则可以使用

如果有的话,我想你需要使用一些更复杂的东西,比如

echo "$blahblah" | \
    perl -pe 's/([^, ])( +)/$1 . "_" x length($2)/ge' | \
    fold -s | \
    tr _ ' '
/ge
使每个替换值都作为perl表达式进行计算

最后的
tr
基本等同于最后一个命令中的关闭
sed

这假定不能保证字符“\u1”不会出现在源文本中。当然还有更好的字符可供选择,例如,一个未使用的控制字符,比如说,^V。如果您在最后使用现代的
perl
进行翻译,我认为您可以使用一些模糊的多字节unicode字符


这个建议很即兴,而且有一些明显的问题。例如,除非逗号后面有空格,否则它不会在逗号后面断开。这可能不是你真正想要的。在CPAN/PyPI/等上做一些深入研究,以获得更健壮的东西,这可能是值得的。或者您可以编写自己的折叠实用程序…

+1非常好,谢谢。所以,我们应该允许立即接受答案,但我想会有两分钟的延迟。非常感谢,你终于让我的声誉受到了冲击,可以发表评论了!:)很高兴我能帮忙!注意,这假设逗号分隔列表的元素中没有空格;它实际上不是在寻找逗号,只是在寻找空格。这是一个很好的观点。折叠(令人惊讶地)几乎没有足够的灵活性来处理空间或硬包装以外的任何东西。实际上,它是一个非常糟糕的工具,在这种情况下,它恰好能够正常工作。我不知道是否还有更好的方法。幸运的是,我的数据中有逗号和空格。我想您可以先执行sed命令,以确保所有逗号前面都有空格。如果您知道一些@intuited和@cecilkorik,我会对只适用于逗号的替代方案感兴趣。