【发布时间】:2018-01-22 18:43:35
【问题描述】:
您好,我正在尝试仅使用简单的 sed 命令编写代码。 这是我的问题:
我想打印文件中的某些行,这些是条件:
-仅当该行至少有 2 个单词时
-仅当第二个单词至少有 3 个字符时
-在满足上述条件后,必须定期打印行,除了行中的第二个单词,其前 3 个字符必须加倍。 编辑:
这部分可以在 AWK 中完成
-在最后一行中,它必须打印原始文件中未包含的行数
例子:
abc2 1 def2 3 abc2
dea 123 123 zy45
12 12
abc cd abc cd
xyz%$@! x@yz%$@! kk
xyzxyz
abc htzw
输出:
dea 112233 123 zy45
xyz%$@! xx@@yyz%$@! kk
abc hhttzzw
4
这是我当前的代码:
sed -r '/[ ]*([^ ]+[ ]){2,}/!d' ex >| tmp
sed -r '/[ ]*[^ ]+[ ][^ ]{3,}/!d' tmp >| tmp2
sed -r 's/([ ]*[^ }+[ ])([^ ])([^ ])([^ ])(*)/\1 \2 \2 \3 \3 \4 \4 \5/' tmp2
>| tmp
但我似乎遇到了一个我无法修复的错误,我不知道如何打印数字 4(参见示例)。
错误:
sed: -e expression #1, char 62: Invalid preceding regular expression
任何帮助都会很棒:)
【问题讨论】:
-
你的例子中没有单4。单“4”是从哪里来的?
-
一开始有 7 行,但在输出中只有 3、7-3。 4 表示开头和不在输出中的行数@Cyrus
-
您需要为此使用
sed吗?使用awk会容易得多。 -
是的,我需要在 sed @PesaThe 中编写它
-
这是学校作业吗?如果是这样的话,我会为教练选择几句话;)