For example, given:
USCAGoleta9311734.5021-120.1287855805
I want to extract just:
US
perl -ple 's/^(..).*/$1/'
You've gotten several good answers and I'd go with the Bash builtin myself, but since you asked about sed
and awk
and (almost) no one else offered solutions based on them, I offer you these:
echo "USCAGoleta9311734.5021-120.1287855805" | awk '{print substr($0,0,2)}'
and
echo "USCAGoleta9311734.5021-120.1287855805" | sed 's/\(^..\).*/\1/'
The awk
one ought to be fairly obvious, but here's an explanation of the sed
one:
easiest way is
${string:position:length}
Where this extracts $length
substring from $string
at $position
.
This is a bash builtin so awk or sed is not required.
Is this what your after?
my $string = 'USCAGoleta9311734.5021-120.1287855805';
my $first_two_chars = substr $string, 0, 2;
ref: substr
If your system is using a different shell (not bash
), but your system has bash
, then you can still use the inherent string manipulation of bash
by invoking bash
with a variable:
strEcho='echo ${str:0:2}' # '${str:2}' if you want to skip the first two characters and keep the rest
bash -c "str=\"$strFull\";$strEcho;"
Just grep:
echo 'abcdef' | grep -Po "^.." # ab