sed将模式移动到行首
我有一个文本文件,其中有几行文本,我想用sed将模式移动到行的开头。模式是类似于sed将模式移动到行首,sed,Sed,我有一个文本文件,其中有几行文本,我想用sed将模式移动到行的开头。模式是类似于[35/44]的序列 CSV文件和Jupyter uu初学者使用更多Python-数据工具[35/44]。说明 为初学者调用API Python[36/44]。说明 使用\[.\\]我可以匹配该行的[11/31],但我不知道如何将此模式移动到行的开头 [35/44]CSV文件和Jupyter uu初学者更喜欢Python-Data Tools.description [36/44]为初学者调用API uPython
[35/44]
的序列
CSV文件和Jupyter uu初学者使用更多Python-数据工具[35/44]。说明
为初学者调用API Python[36/44]。说明
使用\[.\\]
我可以匹配该行的[11/31]
,但我不知道如何将此模式移动到行的开头
[35/44]CSV文件和Jupyter uu初学者更喜欢Python-Data Tools.description
[36/44]为初学者调用API uPython.description
希望有人能帮助我 您需要捕获匹配的内容以及它之前的内容来进行替换。在
sed
中,\(…\)
捕获..
部分中的内容。因此:
sed -e 's/\(.*\)\(\[[^]]*\]\)/\2\1/'
在命令行中使用单引号可以避免使用双反斜杠
如图所示,这将生成:
[35/44]CSV文件和Jupyter uu初学者使用更多Python-数据工具。说明
[36/44]为初学者调用API uPython。说明
如果您想在[n of m]
信息后添加空格,请添加:
sed -e 's/\(.*\)\(\[[^]]*\]\)/\2 \1/'
请注意,如果行上有两个或多个
[n of m]
序列,则仅移动最后一个序列。此外,搜索不强制要求方括号之间的材料为[1/2]
(数字编号)。这样做是可能的;不清楚是否值得担心。您可以使用以下基于POSIX ERE的sed
命令:
sed-E的/(.[^[:space:]])[[:space:]*(\[[0-9]+of[0-9]+])/\2\1/'文件
详情:
-启用POSIX ERE语法(较少转义)-E
-第1组:任何文本,然后是非空白字符(.[^[:space:]])
-零个或多个空格[[:space:][]*
-第2组:(\[[0-9]+of[0-9]+])
,一个或多个数字,空格,[
,空格,一个或多个数字,
\2\1
,即组1值、空格、组2值
见:
s='CSV文件和Jupyter uu初学者使用更多Python-数据工具[35/44]。说明
为初学者调用API Python[36/44]。说明'
sed-E的/(.[^[:space:]])[:space:]*(\[[0-9]+of[0-9]+])/\2\1/'对于显示的示例,请尝试以下内容
awk '
match($0,/\[[^]]*\]/){
print substr($0,RSTART,RLENGTH),substr($0,1,RSTART-1) substr($0,RSTART+RLENGTH)
}
' Input_file
说明:使用awk
的match
功能在每一行中从[
到]
进行匹配,然后先打印匹配文本的子字符串,然后再打印行的其余值。注意sed
不支持非贪婪,因此*?
不起作用。另见:
awk '
match($0,/\[[^]]*\]/){
print substr($0,RSTART,RLENGTH),substr($0,1,RSTART-1) substr($0,RSTART+RLENGTH)
}
' Input_file