awk '/\\section{long text}/ { oldline=$0
getline
gsub("{","[",oldline)
gsub("}","]",oldline)
print gensub("(.*)\\[(.*)\\]","\\1[\\2]{\\2","g",oldline) $0 "}"
getline
}
1' INPUTFILE
會爲你做它是否有long text
沒有換行和有\section
和\sectionmark
之間沒有空行。如果你有任何這些,你仍然可以修改它。
所以要回答你的問題:是的,這是可能的。
UPDATE
這裏是一個可行的解決方案,與awk
:
awk '/\\section{/ { oldline=$0
if (oldline ~ /}/) {
lt=gensub(".*{([^}]+)}.*","\\1","g",oldline)
} else {
lt=gensub(".*{(.*)","\\1","g",oldline)
getline tmp
while (tmp !~ "}") {
lt=lt "\n" tmp
getline tmp
}
lt=lt "\n" gensub("}.*","","g",tmp)
}
getline
while ($0 !~ /\\sectionmark/) {
getline
}
printf("\\section[%s]{%s%s}\n",lt,lt,$0)
getline
}
! /\\section{/ { print }' INPUT_FILE
注意:如果出現任何它不處理long text}
之間\sectionmark
如:
\section{long text}**THIS TEXT WILL BE SKIPPED!!**
\sectionmark{short text}
你可以ñ見ACTION HERE!
如果您想擺脫long text
中的新行,只需在腳本中將"\n"
替換爲" "
即可。
非常感謝你。你能否請求告訴我如何修改「長文本」內部是否有換行符,因爲有一些... – Tobi 2012-02-01 14:35:50
這取決於它。我的paypall地址是我在gmail.com的名字。 ...確定這是一個蹩腳的笑話,但你應該付出一些努力...無論如何,我稍後更新我的答案... – 2012-02-01 19:47:36
再次感謝你,這爲我節省了很多手工和時間。 「付出了一些努力」,通常我會這樣做,如果不對自己做一些研究而不問問題,並期望有人提供完整的代碼,但這次我不知道從哪裏開始搜索,因爲我從來沒有編寫過某些內容,越來越接近O :-)是否有任何資源可以像這樣的問題/任務/腳本推薦? – Tobi 2012-02-01 21:58:01