Sponsored Content
Top Forums Shell Programming and Scripting Need Quick help on Understanding sed Regex Post 302926430 by Scrutinizer on Monday 24th of November 2014 12:07:31 PM
Old 11-24-2014
It will remove trailing whitespace with a single space, but only if it is GNU sed. Regular sed does not understand \t, so then it will remove trailing spaces, backslashes and t's..

Regular sed
Code:
$ printf "%s\n" "Just wait      " | sed 's/[ \t]*$/ /'
Just wai

GNU sed:
Code:
$ printf "%s\n" "Just wait      " | sed 's/[ \t]*$/ /'
Just wait

Regular sed takes a hard TAB character (you can enter it with CTRL-V TAB)
Code:
printf "%s\t\t\n" "Just wait      " | sed 's/[       ]*$/ X/'
Just wait X

In the square brackets are a space and a TAB-character. This is also understood by GNU sed, so for portability use that instead of \t

Last edited by Scrutinizer; 11-24-2014 at 01:14 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Quick regex question

Say that I want to match any of the following: abc def ghi The letters will either be "abc", "def", or "ghi", only those three patterns. The numbers will vary, but there will only be numbers between the brackets. I've only been able to match abc, using the following: abc.*. I'm... (1 Reply)
Discussion started by: retrovertigo
1 Replies

2. Shell Programming and Scripting

Quick regex question about alphabetic string

Hi guys, Pretty new to regex, and i know im doing something wrong here. I'm trying to get a regex command that restricts a string to be 8 characters long, and the first character cannot be 0. Here's what i have so far... echo "01234" | grep "^{8}*$" Thanks very much! -Crawf ... (7 Replies)
Discussion started by: crawf
7 Replies

3. Shell Programming and Scripting

Perl: Any quick way to use regex on hash keys?

Hi, Is there any quick way to use pull out keys that match a specific regex pattern? eg %hash ; $hash(123,456) = xxx; $hash(123,457) = xxx; $hash(123,458) = xxx; $hash(223,459) = xxx; I need a fast way to get all the keys that start with 123.. Meaning I should get ... (5 Replies)
Discussion started by: Leion
5 Replies

4. Shell Programming and Scripting

Converting perl regex to sed regex

I am having trouble parsing rpm filenames in a shell script.. I found a snippet of perl code that will perform the task but I really don't have time to rewrite the entire script in perl. I cannot for the life of me convert this code into something sed-friendly: if ($rpm =~ /(*)-(*)-(*)\.(.*)/)... (1 Reply)
Discussion started by: suntzu
1 Replies

5. Shell Programming and Scripting

Understanding a regex

Hi, Please help me to understand the bold segments in the below regex. Both are of same type whose meaning I am looking for. find . \( -iregex './\{6,10\}./src' \) -type d -maxdepth 2 Output: ./20111210.0/src In continuation to above: sed -e 's|./\(*.\{1,3\}\).*|\1|g' Output: ... (4 Replies)
Discussion started by: vibhor_agarwali
4 Replies

6. Shell Programming and Scripting

help understanding regex with grep & sed

I have the following line of code that works wonders. I just don't completely understand it as I am just starting to learn regex. Can you help me understand exactly what is happening here? find . -type f | grep -v '^\.$' | sed 's!\.\/!!' (4 Replies)
Discussion started by: trogdortheburni
4 Replies

7. Shell Programming and Scripting

Understanding regex behaviour when using quantifiers

# echo "Teest string" | sed 's/e*/=>replaced=</' =>replaced<=Teest string So, in the above code , sed replaces at the start. does that mean sed using the pattern e* settles to zero occurence ? Why sed was not able to replace Teest string. # echo "Teest string" | sed 's/e*//g' Tst string ... (6 Replies)
Discussion started by: chidori
6 Replies

8. Shell Programming and Scripting

Need help understanding this Regex.

Hi everyone, This regex looks simple and yet it doesn't make sense how it's manipulating the output. ifconfig -a eth0 Link encap:Ethernet HWaddr 00:0c:49:c2:35:6v inet addr:192.16.1.1 Bcast:192.168.226.255 Mask:255.255.255.0 inet6 addr:... (2 Replies)
Discussion started by: xcod3r
2 Replies

9. UNIX for Beginners Questions & Answers

Help with understanding this regex in a Perl script parsing a 'complex' string

Hi, I need some guidance with understanding this Perl script below. I am not the author of the script and the author has not leave any documentation. I supposed it is meant to be 'easy' if you're a Perl or regex guru. I am having problem understanding what regex to use :confused: The script does... (3 Replies)
Discussion started by: newbie_01
3 Replies

10. Programming

Regarding a GREAT site for understanding and Visualizing regex patterns.

Hello All, While googling on regex I came across a site named Regulex Regulex:JavaScript Regular Expression Visualizer I have written a simple regex ^(a|b|c)(*)@(.*) and could see its visualization; one could export it too, following is the screen shot. ... (3 Replies)
Discussion started by: RavinderSingh13
3 Replies
TRS(1)								Linux User's Manual							    TRS(1)

NAME
trs - filter replacing strings SYNOPSIS
trs [-[r]e] 'REPLACE_THIS WITH_THAT [AND_THIS WITH_THAT]...' trs [-[r]f] FILE DESCRIPTION
Copy stdin to stdout replacing every occurence of given strings with other ones. This is similar to tr(1), but replaces strings, not only single chars. Rules (separated by whitespace) can be given directly after -e option, or can be read from FILE. Argument not preceded by -e or -f is guessed to be a script when it contains some whitespace, or a filename otherwise. Comments are allowed from # until the end of line. The character # in strings must be specified as #. Standard C-like escapes a  e f v \ nn are recognized. In addition, s means a space character and ! means an empty string. Sets of acceptable characters at a given position can be specified between [ and ]. ASCII ranges in sets can be shortly written as FIRST-LAST. When a set consists of only a single range, [ and ] can be omitted. When a part of the string to translate is enclosed in {...}, only that part is replaced. Any text outside {...} serves as an assertion: a string is translated only if it is preceded by the given text and followed by another one. { at the beginning or } at the end of the string can be omitted. Text outside {...} is treated as untranslated. Before the beginning of the file and after its end there are only 's. Thus, for example, {.} matches . on a line by itself, including the first line, and the last one even without the marker. A fragment of the form ?x=N, where x is a letter A-Za-z and N is a digit 0-9, contained in the target text sets the variable x to the value N when that rule succeeds. Similar fragment in the source text causes the given rule to be considered only if that variable has such value. Initially all variables have the value of 0. Several assignments or conditions can be present in one rule - they are ANDed together. OPTIONS -e Give the translation rules directly in the command line. -f Get them from the file specified. -r Reverse every rule. This affects only the next -e or -f option. Of course this doesn't have to give the reverse translation! Any rule containing any of {}[]{}- is taken in only one direction. You may force any rule to be taken in only one direction by enclosing the string to translate in {...}. --help display help and exit --version output version information and exit Multiple -e or -f options are allowed. All rules are loaded together then, and earlier ones have precedence. EXAMPLE
$ echo Leeloo |trs -e 'el n e i i aqq o} x o u' Linux DIFFERENCES FROM sed The main difference between trs and sed 's///g; ...' (excluding sed's regular expressions) is that sed takes every rule in the order speci- fied and applies it to the whole line of translated file, whereas trs examines every position and tries all rules in this place first. In sed every next rule is fed with the text produced by the previous one, whereas in trs every piece of text can be translated at most once (if more than one rule matches at a given position, the one mentioned earlier wins). That's why sed isn't well suited for translating between character sets. On the other hand, tr translates only single bytes, so it can't be used for Unicode conversions, or TeX / SGML ways for specifying extended characters. Another example: $ echo 642 |trs -e '4 7 72 66 64 4' 42 $ echo 642 |sed 's/4/7/g; s/72/66/g; s/64/4/g' 666 The string to replace can be empty; there must be something outside {} then. In this special case only one such create-from-nothing rule can success at a given position. For example, }x80-xFF @ precedes every character with high byte set with @. The rule of the form some{ thing doesn't work at the end of a file. SEE ALSO
tr(1), konwert(1) COPYRIGHT
trs is a filter replacing strings. It forms part of the konwert package. Copyright (c) 1998 Marcin 'Qrczak' Kowalczyk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MER- CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA AUTHOR
__("< Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.home.ml.org/ \__/ GCS/M d- s+:-- a21 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++ ^^ W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t QRCZAK 5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y- Konwert 12 Jul 1998 TRS(1)
All times are GMT -4. The time now is 11:30 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy