Sponsored Content
Top Forums UNIX for Beginners Questions & Answers How to extract string between two specified characters and end of line? Post 303044863 by MadeInGermany on Thursday 5th of March 2020 12:29:09 PM
Old 03-05-2020
Code:
sed -n "s/$key/$value/gp" $input

only prints lines where a substitution occurred.

But it won't print any existing lines that have not be substituted.
The following bash-4 script is a universal fix:
Code:
#!/bin/bash
# bash 4+ or ksh 93+ required

input=test.txt

# aa[] is an associative (string-indexed) array
typeset -A aa
#declare -A aa # is bash-only

# loop through the key/value file, store in aa[]
while IFS="=" read key value
do
  aa[$key]=$value
done < bbb.txt

# loop through the target file, do not split on whitespace
while IFS= read line
do
  # for each $line
  # loop through the array(-indices)
  for key in "${!aa[@]}"
  do
    # get the corresponding value
    value=${aa[$key]}
    # do the substitutions $key -> $value
    line=${line//$key/$value}
  done
  # printf is more robust than echo
  printf "%s\n" "$line"
done < $input

I have put some comments that explain how it works.
Compared to the sed solution that processes the input file many times, this solution causes less I/O (but uses more memory: the whole bbb.txt file must fit into memory).
It even fixes the potential problem that the values may not contain a / character because it clashes with the / dividers in sed.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Removing characters from end of $string

I am writing a script to search PCL output and append more PCL data to the end accordingly. I need to remove the last 88 bytes from the string. I have searched for a few hours now and am coming up with nothing. I can't use head or tail because the PCL output is all on one line. awk crashes on... (3 Replies)
Discussion started by: craig2k
3 Replies

2. Shell Programming and Scripting

Extract digits at end of string

I have a string like xxxxxx44. What's the best way to extract the digits (one or more) in a ksh script? Thanks (6 Replies)
Discussion started by: offirc
6 Replies

3. AIX

CUT command - cutting characters from end of string

Hello, I need to delete the final few characters from a parameter leaving just the first few. However, the characters which need to remain will not always be a string of the same length. For instance, the parameter will be passed as BN_HSBC_NTRS/hub_mth_ifce.sf. I only need the bit before the... (2 Replies)
Discussion started by: JWilliams
2 Replies

4. Shell Programming and Scripting

Get the 1st 99 characters and add new line feed at the end of the line

I have a file with varying record length in it. I need to reformat this file so that each line will have a length of 100 characters (99 characters + the line feed). AU * A01 EXPENSE 6990370000 CWF SUBC TRAVEL & MISC MY * A02 RESALE 6990788000 Y... (3 Replies)
Discussion started by: udelalv
3 Replies

5. Shell Programming and Scripting

adding characters end of line where line begins with..

Hi all, using VI, can anyone tell me how to add some characters onto the end of a line where the line begins with certain charactars eg a,b,c,......., r,s,t,........, a,b,c,......., all lines in the above example starting with a,b,c, I want to add an x at the end of the line so the... (6 Replies)
Discussion started by: satnamx
6 Replies

6. UNIX for Dummies Questions & Answers

Removing characters from end of string

Hello, I have records like below that I want to remove any five characters from the end of the string before the double quotes unless it is only an asterik. 3919,5020 ,04/17/2012,0000000000006601.43,,0000000000000000.00,, 132, 251219,"*" 1668,0125 ... (2 Replies)
Discussion started by: jyoung
2 Replies

7. UNIX for Dummies Questions & Answers

How to specify beginning-of-line/end-of-line characters inside a regex range

How can I specify special meaning characters like ^ or $ inside a regex range. e.g Suppose I want to search for a string that either starts with '|' character or begins with start-of-line character. I tried the following but it does not work: sed 's/\(\)/<do something here>/g' file1 ... (3 Replies)
Discussion started by: jawsnnn
3 Replies

8. Shell Programming and Scripting

How to extract text from STRING to end of line?

Hi I have a very large data file with several hundred columns and millions of lines. The important data is in the last set of columns with variable numbers of tab delimited fields in front of it on each line. Im currently trying sed to get the data out - I want anything beetween :RES and... (4 Replies)
Discussion started by: Manchesterpaul
4 Replies

9. Red Hat

How to add a new string at the end of line by searching a string on the same line?

Hi, I have a file which is an extract of jil codes of all autosys jobs in our server. Sample jil code: ************************** permission:gx,wx date_conditions:yes days_of_week:all start_times:"05:00" condition: notrunning(appDev#box#ProductLoad)... (1 Reply)
Discussion started by: raghavendra
1 Replies

10. Shell Programming and Scripting

Grep a particular string from column eliminating characters at the end.

Hi, So basically I have this file containing query output in seperated columns. In particular column I have the below strings: news news-prio I am trying to grep the string news without listing news-prio aswell. I tried grep "$MSG_TYPE" , grep -w "$MSG_TYPE" , grep... (4 Replies)
Discussion started by: nms
4 Replies
REQUEST-KEY.CONF(5)					  Linux Key Management Utilities				       REQUEST-KEY.CONF(5)

NAME
request-key.conf - Instantiation handler configuration file DESCRIPTION
This file is used by the /sbin/request-key program to determine which program it should run to instantiate a key. request-key works scans through the file a line at a time until it finds a match, which it will then use. If it doesn't find a match, it'll return an error and the kernel will automatically negate the key. Any blank line or line beginning with a hash mark '#' is considered to be a comment and ignored. All other lines are assumed to be command lines with a number of white space separated fields: <op> <type> <description> <callout-info> <prog> <arg1> <arg2> ... The first four fields are used to match the parameters passed to request-key by the kernel. op is the operation type; currently the only supported operation is "create". type, description and callout-info match the three parameters passed to keyctl request2 or the request_key() system call. Each of these may contain one or more asterisk '*' characters as wildcards anywhere within the string. Should a match be made, the program specified by <prog> will be exec'd. This must have a fully qualified path name. argv[0] will be set from the part of the program name that follows the last slash '/' character. If the program name is prefixed with a pipe bar character '|', then the program will be forked and exec'd attached to three pipes. The callout information will be piped to it on it's stdin and the intended payload data will be retrieved from its stdout. Anything sent to stderr will be posted in syslog. If the program exits 0, then /sbin/request-key will attempt to instantiate the key with the data read from stdout. If it fails in any other way, then request-key will attempt to execute the appropriate 'negate' operation command. The program arguments can be substituted with various macros. Only complete argument substitution is supported - macro substitutions can't be embedded. All macros begin with a percent character '%'. An argument beginning with two percent characters will have one of them dis- carded. The following macros are supported: %o Operation type %k Key ID %t Key type %d Key description %c Callout information %u Key UID %g Key GID %T Requestor's thread keyring %P Requestor's process keyring %S Requestor's session keyring There's another macro substitution too that permits the interpolation of the contents of a key: %{<type>:<description>} This performs a lookup for a key of the given type and description on the requestor's keyrings, and if found, substitutes the contents for the macro. If not found an error will be logged and the key under construction will be negated. EXAMPLE
A basic file will be installed in the /etc. This will contain two debugging lines that can be used to test the installation: create user debug:* negate /bin/keyctl negate %k 30 %S create user debug:loop:* * |/bin/cat create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S negate * * * /bin/keyctl negate %k 30 %S This is set up so that something like: keyctl request2 user debug:xxxx negate will create a negative user-defined key, something like: keyctl request2 user debug:yyyy spoon will create an instantiated user-defined key with "Debug spoon" as the payload, and something like: keyctl request2 user debug:loop:zzzz abcdefghijkl will create an instantiated user-defined key with the callout information as the payload. FILES
/etc/request-key.conf SEE ALSO
keyctl(1), request-key.conf(5) Linux 11 July 2005 REQUEST-KEY.CONF(5)
All times are GMT -4. The time now is 09:03 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy