pre-pend word to the last word of a line
我想把目录名预先挂起到一行中的最后一个字。行的格式如下:
其中,
我想要一个
江户十一〔七〕号
我尝试过的一些行及其相应的输出:
匹配非
1 2 | $ git ls-files -s | sed 's|[^\t]*$|one/&|' one/100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 oneFile |
匹配不是
1 2 | $ git ls-files -s | sed 's|[^\t ]*$|one/&|' 100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e one/0 oneFile |
号
匹配不是水平空白的最长字符串,在"one/"前面加上:
1 2 | $ git ls-files -s | sed 's|[^[[:blank:]]]*$|one/&|' 100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 oneFilone/e |
我基本上尝试了一系列匹配的东西:
- 埃多克斯1〔15〕
- 江户十一〔16〕号
以及上面列出的那些。我能得到的最接近的是拥有
编辑因为有几个人评论/发布了答案,而这些答案对我都不起作用,我想我应该补充一下:我使用的是Mac OS X 10.7.3。我不完全确定(如果有人知道如何让它自由添加评论)的
我也在使用
我对人们给出的答案发表了评论;我假设他们是在Linux发行版上运行的?今晚我不能访问非OS X系统,但明天我会重新运行任何答案;也许只是我的
再次编辑:
所以我在Ubuntu系统上进行了测试,上面的(1)确实有效。不过,我还是喜欢我的Mac电脑的工作版本。
最终编辑:感谢所有用等效命令回答的人。事实证明,我的第一个方法是有效的,但不适用于
这可能对你有用(或者我错过了什么吗?):
1 2 | echo -e"100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0\toneFile" | sed 's/\t/&one\//' 100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 one/oneFile |
。
现在无法测试,但字符类使用的括号太多。
1 | [^[[:space:]]]*$|one/& |
。
应该是
1 | [^[:space:]]*$|one/& |
使用额外的括号,您只会得到字符"["、':"、's'、'p'、'a'、'c'、'e'、']'——解释为什么目录插入到最后一个'e'之前
这很简单,但似乎有效:
1 2 | echo -e '100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 oneFile' | sed -e 's/\([a-zA-Z]\+\)$/one\/\0/g' 100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 one/oneFile |
它应该在一个文件之前使用一个选项卡。
以下对我有效:
1 2 3 | git ls-files -s | sed -e 's|\t\(.\+\)$|\tone/\1|g' 100644 345242cb0c4e9bb01a6fef9947f4342ff2f68553 0 one/ExView/resource.h |
本来应该是
1 | 100644 345242cb0c4e9bb01a6fef9947f4342ff2f68553 0 ExView/resource.h |
号
我也遇到了一些奇怪的新品问题。我怀疑这是你的问题,但在过去,
' | ...
我本想这么做的,但却没有四处转悠…
唯一的问题是,OS X SED不能将 识别为制表符,如本文所述。必须使用实际的制表符。在原始日志中使用选项1,但不要键入
另请参见此问题。