Example: file contains the following:
lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-dr test2 /test2
lebnassvm0a-dr test3 /test3
stgtestsvm1-dr test21 /test21
stgtestsvm1-dr test22 /test22
stgtestsvm1-dr test23 /test23
I want to find the "-dr" and replace with "-drt" and insert the full string in front of the existing, like this:
lebnassvm0a-drt lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-drt lebnassvm0a-dr test2 /test2
lebnassvm0a-drt lebnassvm0a-dr test3 /test3
stgtestsvm1-drt stgtestsvm1-dr test21 /test21
stgtestsvm1-drt stgtestsvm1-dr test22 /test22
stgtestsvm1-drt stgtestsvm1-dr test23 /test23
Example: file contains the following:
lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-dr test2 /test2
lebnassvm0a-dr test3 /test3
stgtestsvm1-dr test21 /test21
stgtestsvm1-dr test22 /test22
stgtestsvm1-dr test23 /test23
I want to find the "-dr" and replace with "-drt" and insert the full string in front of the existing, like this:
lebnassvm0a-drt lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-drt lebnassvm0a-dr test2 /test2
lebnassvm0a-drt lebnassvm0a-dr test3 /test3
stgtestsvm1-drt stgtestsvm1-dr test21 /test21
stgtestsvm1-drt stgtestsvm1-dr test22 /test22
stgtestsvm1-drt stgtestsvm1-dr test23 /test23
Share
Improve this question
edited Nov 19, 2024 at 15:23
Gilles Quénot
186k43 gold badges231 silver badges229 bronze badges
asked Nov 19, 2024 at 15:21
Bob MooreBob Moore
214 bronze badges
3
|
3 Answers
Reset to default 0What I would do:
$ sed -E 's/^([^-]+-dr)/\1t \1/' file
lebnassvm0a-drt lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-drt lebnassvm0a-dr test2 /test2
lebnassvm0a-drt lebnassvm0a-dr test3 /test3
stgtestsvm1-drt stgtestsvm1-dr test21 /test21
stgtestsvm1-drt stgtestsvm1-dr test22 /test22
stgtestsvm1-drt stgtestsvm1-dr test23 /test23
The regular expression matches as follows:
Node | Explanation |
---|---|
^ |
the beginning of the string anchor |
( |
group and capture to \1: |
[^-]+ |
any character except: - (1 or more times (matching the most amount possible)) |
-dr |
'-dr' |
) |
end of \1 |
This might work for you (GNU sed):
sed 's/^\S*-dr\>/&t &/' file
Replace the first non-white spaced string ending in -dr
with itself followed by a t
a space and the original string.
Using any awk:
$ awk '{print $1"t", $0}' file
lebnassvm0a-drt lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-drt lebnassvm0a-dr test2 /test2
lebnassvm0a-drt lebnassvm0a-dr test3 /test3
stgtestsvm1-drt stgtestsvm1-dr test21 /test21
stgtestsvm1-drt stgtestsvm1-dr test22 /test22
stgtestsvm1-drt stgtestsvm1-dr test23 /test23
or GNU sed:
$ sed -E 's/\S+/&t &/' file
lebnassvm0a-drt lebnassvm0a-dr test1 /vol/test1
lebnassvm0a-drt lebnassvm0a-dr test2 /test2
lebnassvm0a-drt lebnassvm0a-dr test3 /test3
stgtestsvm1-drt stgtestsvm1-dr test21 /test21
stgtestsvm1-drt stgtestsvm1-dr test22 /test22
stgtestsvm1-drt stgtestsvm1-dr test23 /test23
The above assume given the example provided in the question that you really just want to duplicate and add t
to the first field in the input, the requirement to match on -dr
is a red herring.
-dr
with-drt
? – Ulrich Eckhardt Commented Nov 19, 2024 at 15:24-dr
then you should include that in your sample input/output so we can see how that should be handled. – Ed Morton Commented Nov 21, 2024 at 11:23