右对齐一行中的最后一个单词

死灵

并非在每一行中都存在

|标记行的最大长度的示例,例如不包括行尾的 79 个字符,并且SPECIAL_WORD是标题中提到的最后一个单词:

Some words with(some = ! characters, beside ASCII) sdsdds                     |
Some words with(some = ! characters, beside ASCII)   SPECIAL_WORD             |
                                                                              |
Some words (some = ! characters, beside ASCII)  as  SPECIAL_WORD              |
Some words (some = ! characters, beside ASCII) asdb asd                       |
foobar blah SPECIAL_WORD                                                      |
eside ASCII) asdb asd eside ASCII) asdb asd eside ASCII) asdb asd eside ASCII)| asdb asd SPECIAL_WORD
Some words (some = ! characters, be                                           |
Some words (some = ! characters, beSome words (some = ! characters, be SPECIAL|_WORD
Some words (some = ! characters, beside ASCII)  as  SPECIAL_WORD              |
                                                                              |
                                                                              |
Some words (some = ! characters, beside ASCII)  as                SPECIAL_WORD|
Some words (some = ! characters, beside ASCII)  as                   SPECIAL_W|ORD
Some words (some = ! characters, beside ASCII) asdb asd                       |
                                                                              |
Some words (some SPECIAL_WORD = ! characters, beside ASCII) asdb asd          |
                                                                              |

预期输出:

Some words with(some = ! characters, beside ASCII) sdsdds                     |
Some words with(some = ! characters, beside ASCII)                SPECIAL_WORD|
                                                                              |
Some words (some = ! characters, beside ASCII)  as                SPECIAL_WORD|
Some words (some = ! characters, beside ASCII) asdb asd                       |
foobar blah                                                       SPECIAL_WORD|
eside ASCII) asdb asd eside ASCII) asdb asd eside ASCII) asdb asd eside ASCII)| asdb asd SPECIAL_WORD
Some words (some = ! characters, be                                           |
Some words (some = ! characters, beSome words (some = ! characters, be SPECIAL|_WORD
Some words (some = ! characters, beside ASCII)  as                SPECIAL_WORD|
                                                                              |
                                                                              |
Some words (some = ! characters, beside ASCII)  as                SPECIAL_WORD|
Some words (some = ! characters, beside ASCII)  as                SPECIAL_WORD|
Some words (some = ! characters, beside ASCII) asdb asd                       |
                                                                              |
Some words (some SPECIAL_WORD = ! characters, beside ASCII) asdb asd          |
                                                                              |

相当混乱,不是吗?我尝试实施的规则是:

右对齐SPECIAL_WORD使得

  1. 的最后一个字符SPECIAL_WORD应位于第 79 列,行尾字符之前的最后一个字符
  2. ifSPECIAL_WORD后跟除行尾字符以外的任何字符,该行不应被触及
  3. 如果包含的行SPECIAL_WORD已经超过允许的长度,则不应触摸,除非左侧有足够的空间SPECIAL_WORD
  4. 如果该行的最后一个字符与该行SPECIAL_WORD的第一个字符之间没有空格,则SPECIAL_WORD不得触及 5- 如果右对齐后的行SPECIAL_WORD长度超过该行不得触及的限制
  5. SPECIAL_WORD 可能包含多个单词,但应视为一个单元
  6. SPECIAL_WORD 仅由 ASCII 字符组成。
  7. 它始终是一行,不会有换行符 SPECIAL_WORD

我尝试了像col, column, fmt, format, Bash 之类的常见嫌疑人printf这里列出的大多数想法(awk,简短的 shell 脚本片段sed等等),但一切都是某种“接近但没有雪茄”。我已经降低了规则的严格性,因此我不得不忽略的其中一个函数/脚本现在可能会起作用,但是太多了,无法记住所有这些。

在我坐下来写一个完整的解析器来做它之前,让我在这里问一下我的问题是否有更简单的解决方案。

由于正确的坚持让我发布我在这里尝试的内容是最接近的:

cat format_test  | perl -e 'my $len;foreach my $line ( <STDIN> ) {$line =~ /^$/ and print $line and next;$line =~ /^(.+?)( *?)(SPECIAL_WORD)?$/;$len = 79-(length($1));  printf("%s%${len}s\n", $1,$3);}'

cat用于明确输入来自管道)

我向每位 Perl 程序员致以最深切的歉意!

那个小可憎的输出:


Some words with(some = ! characters, beside ASCII) sdsdds                      
Some words with(some = ! characters, beside ASCII)                 SPECIAL_WORD

Some words (some = ! characters, beside ASCII)  as                 SPECIAL_WORD
Some words (some = ! characters, beside ASCII) asdb asd                        
foobar blah                                                        SPECIAL_WORD
eside ASCII) asdb asd eside ASCII) asdb asd eside ASCII) asdb asd eside ASCII) asdb asdSPECIAL_WORD
Some words (some = ! characters, be                                            
Some words (some = ! characters, beSome words (some = ! characters, beSPECIAL_WORD
Some words (some = ! characters, beside ASCII)  as                 SPECIAL_WORD


Some words (some = ! characters, beside ASCII)  as                 SPECIAL_WORD
Some words (some = ! characters, beside ASCII)  as                 SPECIAL_WORD
Some words (some = ! characters, beside ASCII) asdb asd                        

Some words (some SPECIAL_WORD = ! characters, beside ASCII) asdb asd

这在它不应该的行上工作。

斯蒂芬·查泽拉斯

使用perl, 并假设所有字符都是单宽的:

perl -Mopen=locale -lspe '
  BEGIN{$pad = $width - 1 - length $word}
  s/(.*?)\s+\Q$word\E$/sprintf "%-*s %s", $pad, $1, $word/e
' -- -width=79 -word=SPECIAL_WORD < your-file

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

bash获得第一个单词的最后一行

来自分类Dev

在“选择选项”中将一个单词向左对齐,将一个单词向右对齐

来自分类Dev

左右对齐同一行

来自分类Dev

在同一行中从左到右对齐<li>

来自分类Dev

将h2与CSS类左对齐和右对齐一行

来自分类Dev

删除shell中一行的最后一个单词

来自分类Dev

打印第一行的第一个单词和最后一个单词

来自分类Dev

Lua string.find在一行中找不到最后一个单词

来自分类Dev

如何删除当前行中的最后一个单词,但前提是下一行中出现模式?

来自分类Dev

CSS:在同一行中左右对齐两个元素,WHITHOUT浮动

来自分类Dev

从shell中的每一行提取最后一个单词

来自分类Dev

如何使用记事本++重复一行的最后一个单词

来自分类Dev

使用Angular Material,是否可以在同一行中将一个按钮左对齐,将另一个按钮右对齐?

来自分类Dev

在Bootstrap面板中左对齐一个按钮,右对齐两个按钮

来自分类Dev

左对齐一个孩子,其余右对齐div

来自分类Dev

即使屏幕很小,如何使div对齐一行

来自分类Dev

Word格式-在同一行中左对齐,居中对齐和右对齐

来自分类Dev

对齐一行中的多个div,将文本垂直和水平居中

来自分类Dev

对齐一行html文本以填充整行?

来自分类Dev

如何使用sed将一行中的第一个单词与最后一个单词进行比较?

来自分类Dev

如何删除当前行中的最后一个单词,但前提是下一行中出现模式?

来自分类Dev

提取文本文件最后一行中的最后一个单词的脚本

来自分类Dev

如何从文本文件中读取最后一行的第一个单词?

来自分类Dev

左右对齐一个弹性项目,同时使其他弹性项目居中

来自分类Dev

DataGridView 对齐一个特定的单元格

来自分类Dev

Python - 匹配最后一个单词并从上一行删除

来自分类Dev

需要 Linux 中文件中每一行的最后一个完整单词

来自分类Dev

在 matplotlib 中对齐一行图

来自分类Dev

如何在 JavaFX 中对齐一行?

Related 相关文章

  1. 1

    bash获得第一个单词的最后一行

  2. 2

    在“选择选项”中将一个单词向左对齐,将一个单词向右对齐

  3. 3

    左右对齐同一行

  4. 4

    在同一行中从左到右对齐<li>

  5. 5

    将h2与CSS类左对齐和右对齐一行

  6. 6

    删除shell中一行的最后一个单词

  7. 7

    打印第一行的第一个单词和最后一个单词

  8. 8

    Lua string.find在一行中找不到最后一个单词

  9. 9

    如何删除当前行中的最后一个单词,但前提是下一行中出现模式?

  10. 10

    CSS:在同一行中左右对齐两个元素,WHITHOUT浮动

  11. 11

    从shell中的每一行提取最后一个单词

  12. 12

    如何使用记事本++重复一行的最后一个单词

  13. 13

    使用Angular Material,是否可以在同一行中将一个按钮左对齐,将另一个按钮右对齐?

  14. 14

    在Bootstrap面板中左对齐一个按钮,右对齐两个按钮

  15. 15

    左对齐一个孩子,其余右对齐div

  16. 16

    即使屏幕很小,如何使div对齐一行

  17. 17

    Word格式-在同一行中左对齐,居中对齐和右对齐

  18. 18

    对齐一行中的多个div,将文本垂直和水平居中

  19. 19

    对齐一行html文本以填充整行?

  20. 20

    如何使用sed将一行中的第一个单词与最后一个单词进行比较?

  21. 21

    如何删除当前行中的最后一个单词,但前提是下一行中出现模式?

  22. 22

    提取文本文件最后一行中的最后一个单词的脚本

  23. 23

    如何从文本文件中读取最后一行的第一个单词?

  24. 24

    左右对齐一个弹性项目,同时使其他弹性项目居中

  25. 25

    DataGridView 对齐一个特定的单元格

  26. 26

    Python - 匹配最后一个单词并从上一行删除

  27. 27

    需要 Linux 中文件中每一行的最后一个完整单词

  28. 28

    在 matplotlib 中对齐一行图

  29. 29

    如何在 JavaFX 中对齐一行?

热门标签

归档