Post History
The simple and obvious solution: sed 's/^ *//;s/ *$//' Many recipes you find online will erroneously add a g flag, but these regular expressions can only match once per line anyway. (In some m...
Answer
#7: Post edited
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
(In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- If your `sed` implementation doesn't support stringing multiple commands together with `;` as shown above, you can pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- The regular expressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that. It is harmless as such, of course, but betrays a [cargo cultish](https://en.wikipedia.org/wiki/Cargo_cult) lack of understanding of the construct.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- If your `sed` implementation doesn't support stringing multiple commands together with `;` as shown above, you can pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- The regular expressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
#6: Post edited
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
Many `sed` implementations will allow you to pass in the script piecemeal with multiple `-e` options.- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
but this is somewhat less portable.- The regular expressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- If your `sed` implementation doesn't support stringing multiple commands together with `;` as shown above, you can pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- The regular expressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
#5: Post edited
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Many `sed` implementations will allow you to pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- but this is somewhat less portable.
The regular oxpressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Many `sed` implementations will allow you to pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- but this is somewhat less portable.
- The regular expressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
#4: Post edited
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Many `sed` implementations will allow you to pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- but this is somewhat less portable.
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Many `sed` implementations will allow you to pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- but this is somewhat less portable.
- The regular oxpressions above specifically target literal spaces. If you want to target any whitespace, replace each ` ` with `[[:space:]]`, which is a POSIX character class which matches one whitespace character of any kind (space, tab, etc).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
#3: Post edited
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
sed `1s/^ *//;$s/ *$//'- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed '1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Many `sed` implementations will allow you to pass in the script piecemeal with multiple `-e` options.
- ```
- sed -e '1s/^ *//' -e '$s/ *$//'
- ```
- but this is somewhat less portable.
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
#2: Post edited
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
sed `1s/^ *//;$s/ *//'- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
- The simple and obvious solution:
- ```
- sed 's/^ *//;s/ *$//'
- ```
- Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway.
- (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.)
- Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too.
- ```
- sed `1s/^ *//;$s/ *$//'
- ```
- This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line).
- Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.
#1: Initial revision
The simple and obvious solution: ``` sed 's/^ *//;s/ *$//' ``` Many recipes you find online will erroneously add a `g` flag, but these regular expressions can only match once per line anyway. (In some more detail, `s/from/to/g` says to replace all occurrences of `from` _on the current input line;_ but of course, if you know `from` can only match once, you don't want or need that.) Your requirement to treat the first and last lines differently seems odd to me, but `sed` easily allows you to do that too. ``` sed `1s/^ *//;$s/ *//' ``` This adds the address expression `1` to the first command (which matches on line number 1) and the address `$` to the last (which matches the final input line). Something similar could be achieved with Awk with a clever `RS` (record separator) but I'd consider that more obscure, as well as probably slower.