Regex-based matching and sustitution with nano?
My version of nano has an option to swtich to regex search with the meta
character + R
. In cygwin on Windows, the meta-key is alt
, so I hit ctrl
+\
to get into search-and-replace mode, and then alt
+r
to swtich to regex search.
The regular expression format / notation for nano use "Extended Regular Expression", i.e. POSIX Extended Regular Expression, which is used by egrep
and sed -r
, this include metacharacters .
, [
and ]
, ^
, $
, (
, )
, \1
to \9
, *
, {
and }
, ?
, +
, |
, and character classes like [:alnum:]
, [:alpha:]
, [:cntrl:]
, [:digit:]
, [:graph:]
, [:lower:]
, [:print:]
, [:punct:]
, [:space:]
, [:upper:]
, and [:xdigit:]
.
For more complete documentation you can see manual page, man 7 regex
in Linux or man 7 re_format
in OS X. This page may give you same information as well: https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended
Unfortunately in nano there seems to be no way to match anything that span across multiple lines.
You need to add, or un-comment, the following entry in your global nanorc
file (on my machine, it was /etc/nanorc
):
set regexp
Then fire up a new terminal and press CTRL + / and do your replacements which should now be regex-aware.
EDIT
Search for conf->(\S+)
:
Replace with \1_conf
Press a
to replace all occurrences:
End result:
This is a bit old, just updating the search index.
Nano 5.5 uses the ASCII
column from this same table.
Thanks to @S P Arif Sahari Wibowo ,
I found the answer here anyway (same wiki link): https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended