Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Im pretty stupid when in comes to bash and I was hoping someone could help me.

I would like to take the output of

hg resolve -l

which is in the format

R somefile/filename
U somefile/filename
R somefile/filename
U somefile/filename

and be able to use the first line that starts with a 'U' as an argument, so i could do things like

open -t <first U file>


hg resolve -m <first U file>

it would be great it someone could give me some pointers about the best way to do this!


EDIT: solution from answers below, a simple script. Thanks guys!


# Script that gets the first file from hg resolve | grep U and passes to default text editor

first_u_file=$(hg resolve -l | grep -m1 '^U')
first_u_file=${first_u_file#U }
echo opening \'$first_u_file\'
open -t "$first_u_file"
share|improve this question

migrated from stackoverflow.com Jun 4 '12 at 15:23

This question came from our site for professional and enthusiast programmers.

echo "opening '$first_u_file'" - you don't need to escape the single quotes and the variable gets properly quoted. – Dennis Williamson May 31 '12 at 11:16
up vote 3 down vote accepted

With GNU grep, you can try this (untested):

first_u_file=$(hg resolve -l | grep -m1 '^U')
first_u_file=${first_u_file#U }

-mX tells grep to stop after printing X lines, 1 in this case. The $(...) construct is similar to backticks, it turns output into a string. The second line removes "U " from the beginning of the file name.

share|improve this answer
where does this need to live? is this an alias? sorry for my minimal understanding!! – Dori May 31 '12 at 9:14
@Dori You can now use the variable, as in open -t "$first_u_file" and so on. – choroba May 31 '12 at 9:31
+1 great thanks! it works!! So whats going on here? If i enter the above first_u_file lines in bash it works, i tried to put them in bash_profile and it does not work. How can store this permenantly in some config file? – Dori May 31 '12 at 9:45
@Dori What exactly do you need to keep stored? – choroba May 31 '12 at 9:51
@Dori: Functions and commands only return their exit status, not string. But you can create a script or a function that prints (echo-es) the value and then run open -t $(grab_first_file_name). – choroba May 31 '12 at 10:26

A simpler solution:

u_file=$( hg resolve -l | awk '/^U/{print $2; exit}' )
share|improve this answer

hg resolve -l | egrep '^U.*' | head -n 1

the output is the first U file

to use it as open argument with "U" dropped:

firstUfile=`hg resolve -l | egrep '^U.*' | head -n 1 | sed -e 's/^U\s+\(.*\)$/"\1"/'`
open -t $firstUfile
share|improve this answer
+1 thanks, a good start. So how do I use this as an input for open -t. I need to remove the 'U ' also I presume – Dori May 31 '12 at 9:11
I've edited to include U removal, I've put double quotes around the filename in case it has spaces, if you don't need it, feel free to remove from the sed substitution – LeleDumbo May 31 '12 at 9:21
this does not seem to remove the 'U ' ? Do i jut put this in .bash_proile with a preceeding alias ? – Dori May 31 '12 at 9:30
ah i see, its a variable, ok! executing that string of piped commands still gives me the preceeding U :( – Dori May 31 '12 at 9:40

Rather than just open the first file, your script could iterate over all unresolved files:


while read; do
    file="${REPLY#U }"
    echo "Opening '$file'"
    open -t "$file"      
    hg resolve -m "$file"
done <( hg resolve -l | grep "^U" )

(I'm not familiar with hg; would hg resolve -aln give you just the list of unresolved files without the "U" prefix? That would do away with the need for the grep and the U-stripping step.)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.